driften - GTA aber richtig
Übersicht

![]() |
geldiBetreff: driften - GTA aber richtig |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute !
Ich hab mir im Dezember Blitz2D download gekauft und mir erstmal den BBkurs2 von der Robsite reingezogen. Nach einigen SinCos + GTA tut´s (danke inpac) hab ich volgendes geschrieben. Code: [AUSKLAPPEN] Const scrnx = 800 , scrny = 600 Const vmax = 15 , rmax = -5 , lwmax = 5 , lwscale# = 0.75 Const beschleunigung# = 0.2 , verzoegerung# = 0.4 , reibung# = 0.02 Global x# = scrnx/2 , y# = scrny/2 Global speed#=0 , winkel=0 , lwinkel = 0 EnableDirectInput=True Graphics scrnx , scrny , 16 , 1 SetBuffer BackBuffer () TFormFilter 0 Dim Auto(359) Color 255,0,0:Rect 0,0,64,30 auto(0)= CreateImage(64,30) GrabImage auto(0),0,0 MidHandle auto(0) For winkel = 1 To 359 auto(winkel) = CopyImage (auto(0)) MidHandle auto(winkel) RotateImage auto(winkel),winkel Next While Not KeyHit (1) CarControl () MovePlayer () RenderGame () Wend End Function CarControl () lwinkel = Int(speed * lwscale) If lwinkel > lwmax Then lwinkel = lwmax If lwinkel < -lwmax Then lwinkel= -lwmax If KeyDown (203) Then winkel = winkel - lwinkel;links If KeyDown (205) Then winkel = winkel + lwinkel;rechts If winkel > 359 Then winkel = winkel - 360 If winkel < 0 Then winkel = 360 + winkel If KeyDown (200) Then ; Gas speed = speed + beschleunigung If speed > vmax Then speed=vmax EndIf If KeyDown (208) Then ; Bremse / rueckwaerts speed = speed - beschleunigung If speed < rmax Then speed=rmax EndIf If KeyDown (57) Then ; Handbremse If speed > 0 Then speed = speed - verzoegerung If speed < 0 Then speed=0 EndIf If speed < 0 Then speed = speed + verzoegerung If speed > 0 Then speed=0 EndIf End If If speed > 0 Then speed = speed - reibung If speed < 0 Then speed=0 EndIf If speed < 0 Then speed = speed + reibung If speed > 0 Then speed=0 EndIf End Function Function MovePlayer () If x > scrnx Then x = 1 If x < 0 Then x = scrnx If y > scrny Then y = 1 If y < 0 Then y = scrny x = x + (Cos(winkel) * speed) y = y + (Sin(winkel) * speed) End Function Function RenderGame () Cls DrawImage Auto(winkel),x,y Color 255,255,255 Text 8, 8,"Speed : " + Str(speed) Text 8,24,"Winkel : " + Str(winkel) Text 8,40,"LWinkel: " + Str(lwinkel) Text 8,56,"X-Pos : " + Str(x) Text 8,72,"Y-Pos : " + Str(y) Flip End Function Nun meine Frage ! Wie erreiche ich ein übersteuern (ausbrechen des Hecks) bei zu schneller Kurvenfahrt oder Handbremse in Kurve. Ich hab schon versucht den ImageHandle richtung Vorderachse zu verschieben aber das bringt mich nicht wirklich weiter. (müste man in mehreren Phasen für alle 360 Bilder machen) Ich bin sehr gespannt auf eure Vorschläge |
||
konstantin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du könntest natürlich einfach das Auto drehen, dann hättest du den Drehpunkt zwar nicht auf der Vorder-Achse, aber wenn es realistisch wirken soll, musst nu mit ImageHandle ungefähr die Vorderachse nehmen, das ist ja meißtens auch der Drehpunkt von einm normale Auto. Bei Übersteuerung dann halt statt z.B. 1 Grad bewegen halt 3. | ||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das würde mich auch mal interessieren. Habe auch mal sowas geschrieben. Ist aber vom Handling deiner Version ziemlich ähnlich.
http://home.t-online.de/home/Daniel.Nobis/Auto.rar(9kb) Was die Handbremse angeht, so habe ich es bei mir noch so gemacht, daß das Auto leicht zur Seite zieht |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
geldi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Idee !
Eine Variable für die Fahrtrichtung und eine zweite für die Richtung in die das Auto schaut. Wenn drift dann Schaurichtung in kurve drehen und Lenkwinkel erhöhen. Wenn drift ende dann Fahrtrichtung = Schaurichtung. Was den Drehpunkt betrifft so gehört er bei normaler Fahrt eher auf dir Hinterachse sonst fährt es sich wie ein Gabelstabler mit Hecklenkung. Vielen Dank schonmal mfg geldi |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich würde es so machen, wenn er Handbremse zieht, normal bremst oder einfach sich zu schnell in die Kurve legt (bei einer Überschreitung der vorgeg. Geschwindigkeit) versetzt Du den Drehpunkt von Automitte je nach intensität nach vorne. Das dürfte den Drifteffekt einfach umsetzen. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://www.blitzbase.de/quellc...unigung.bb
mein vorschlag wäre: man gibt dem auto zwei punkte, die eigene x- und ygeschwindigkeiten haben. natürlich verfügen beide punkte über eine gewisse trägheit. richtung und geschwindigkeit wirken sich dabei auf den einen der punkte, oder bei allrad auf beide, aus. mit etwas winkel- und abstandsberechnungen wird dafür gesorgt, dass beide punkte immer den gleich abstand behalten. die geschwindigkeiten der beiden punkte wirken sich aufeinander aus, indem sie immer versuchen dieselbe geschwindigkeit zu erhalten, was natürlich dazu führen kann, dass der hintere den vorderen oder der vordere den hinteren irgendwohin zieht. |
||
MrKeks.net |
![]() |
geldi |
![]() Antworten mit Zitat ![]() |
---|---|---|
So geschafft !
Das auto driftet jetzt sehr schöhn und reagiert magnetisch auf 90 Grad Winkel so das man die Straßen besser trift. Durch pfriemeln an den Constanten läst sich das Fahr+ Driftverhalten sehr gut einstellen. Wer die Lenkhilfe nicht mag möge sie abschalten. Code: [AUSKLAPPEN] Const scrnx = 800, scrny = 600 Const vmax = 10 , rmax = -5 , lwmax = 5 , lwscale# = 0.75 Const beschleunigung# = 0.15 , verzoegerung# = 0.3 , reibung# = 0.02 Const dwmax = 45, dwstep = 3 , dlw = 4 Const lhspeed = 5 , lhrange = 25 Global x# = scrnx/2 , y# = scrny/2 Global speed#=0 , winkel=0 , lwinkel = 0 Global drift , driftOld , face , faceOld , driftwinkel EnableDirectInput=True Graphics scrnx , scrny , 16 , 1 SetBuffer BackBuffer () TFormFilter 0 Dim Auto(359) Color 255,0,0:Rect 0,0,64,30 auto(0)= CreateImage(64,30) GrabImage auto(0),0,0 MidHandle auto(0) For winkel = 1 To 359 auto(winkel) = CopyImage (auto(0)) MidHandle auto(winkel) RotateImage auto(winkel),winkel Next While Not KeyHit (1) CarControl () MovePlayer () RenderGame () Wend End Function CarControl () lwinkel = speed * lwscale : driftspeed = 0 : kurve=0 If lwinkel > lwmax Then lwinkel = dlw : driftspeed = 1 If lwinkel < -lwmax Then lwinkel = -dlw : driftspeed = 1 If KeyDown (203) = True And KeyDown (205) = False Then ;links winkel = winkel - lwinkel kurve = -1 End If If KeyDown (205) = True And KeyDown (203) = False Then ;rechts winkel = winkel + lwinkel kurve = 1 End If If winkel > 359 Then winkel = winkel - 360 If winkel < 0 Then winkel = 360 + winkel If KeyDown (200) = True And KeyDown (208) = False Then ;vorwaerts speed = speed + beschleunigung If speed > vmax Then speed=vmax EndIf If KeyDown (208) = True And KeyDown (200) = False Then ;rueckwaerts speed = speed - beschleunigung If speed < rmax Then speed=rmax EndIf If speed > lhspeed And kurve = 0 Then ; lenkhilfe If winkel > 0 And winkel < 0 + lhrange Then winkel = winkel - 1 If winkel > 360 - lhrange And winkel < 360 Then winkel = winkel + 1 If winkel > 180 And winkel < 180 + lhrange Then winkel = winkel - 1 If winkel > 180 - lhrange And winkel < 180 Then winkel = winkel + 1 If winkel < 90 + lhrange And winkel > 90 Then winkel = winkel - 1 If winkel < 90 And winkel > 90 - lhrange Then winkel = winkel + 1 If winkel < 270 And winkel > 270 - lhrange Then winkel = winkel + 1 If winkel > 270 And winkel < 270 + lhrange Then winkel = winkel - 1 If winkel > 359 Then winkel = winkel - 360 If winkel < 0 Then winkel = 360 + winkel End If driftOld=drift : drift=0 : faceOld=face : face=winkel If driftspeed And kurve <> 0 Then ;driften drift=1 : driftwinkel = driftwinkel + dwstep If driftwinkel > dwmax Then driftwinkel = dwmax face = winkel + driftwinkel * kurve If face > 359 Then face = face -360 If face < 0 Then face = face +360 End If If driftold And drift=0 Then ;drift ende face=faceold winkel = face driftwinkel = 0 End If If KeyDown (57) Then ; Bremse If speed > 0 Then speed = speed - verzoegerung If speed < 0 Then speed=0 EndIf If speed < 0 Then speed = speed + verzoegerung If speed > 0 Then speed=0 EndIf End If If speed > 0 Then speed = speed - reibung If speed < 0 Then speed=0 EndIf If speed < 0 Then speed = speed + reibung If speed > 0 Then speed=0 EndIf End Function Function MovePlayer () x = x + (Cos(winkel) * speed) y = y + (Sin(winkel) * speed) If x > scrnx Then x = 0 If x < 0 Then x = scrnx If y > scrny Then y = 0 If y < 0 Then y = scrny End Function Function RenderGame () Cls DrawImage Auto(face),x,y Color 255,255,255 Text 8, 8,"Speed : " + Str(speed) Text 8,24,"Winkel : " + Str(winkel) Text 8,40,"LWinkel: " + Str(lwinkel) Text 8,56,"X-Pos : " + Str(x) Text 8,72,"Y-Pos : " + Str(y) Flip End Function mfg geldi |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
sry, aber habe gerade mal deinen Code ausprobiert und nachdem ich noch
if keyhit(200)=true and keyhit(208)=false durch if keyhit(200)=true and speed<=1 ersetzt hatte, weil es einfach zu schnell lief, hab ich nichts von drifting gemerkt. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
gamble |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Herzlichen Glückwunsch, Sie haben gerade einen mehr als ein Jahr alten Beitrag heraufgeholt ![]() |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
bin auch nur über nen anderen Link drauf gestoßen und hab auch nicht aufs datum geschaut
also sorry da sieht man aber mal wieder, was die mods an arbeit erbracht haben, wenn sie so altes zeugs nicht closen |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alter ist kein Grund für einen Close ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
x.Force |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh ich bin dir dankbar ![]() und es ist allerdings kein grund für nen close nur weil es alt ist ... |
||
AMD Athlon XP 2000+ | 1024mb DDR-Ram | Asus Radeon 9600XT | BENQ FP757 17°Zoll TFT Was kümmert mich mein Geschwätz von gestern? (Konrad Adenauer) -.- |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group