Trägheit klappt nicht

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

-BB Noob-

Betreff: Trägheit klappt nicht

BeitragMo, Apr 04, 2005 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie man sieht sind das meine ersten Versuche an eine Fahrphysik.
Das Problem liegt darin das ich die Variablen Playerxspeedold und Playeryspeedold immer erhöhe bzw. verkleiner, dass das Auto dann irgentwann abgeht wie ne Rakete. Mir fällt keine Lösung ein wie ich das Lösen kann(<---Schlauer Satz). Die Trägheit klappt zwar aber eben mit, sagen wir mal Nebenwirkungen.


Hier der Code:

BlitzBasic: [AUSKLAPPEN]
AppTitle \"NoName\"
SeedRnd MilliSecs()
Graphics 800,600,0,2

AutoMidHandle True
PlayerBild = LoadImage(\"PlayerBild.bmp\")



Dim Player(359)

For i = 0 To 359
Player(i) = CopyImage(Playerbild)
RotateImage Player(i),i
Next

;Vorgaben

Playerx# = 200
Playery# = 200
Playerwinkel = 50
Playerspeed# = 0.5
Playerxspeed# = 0
Playeryspeed# = 0
Playerxspeedold# = 0
Playeryspeedold# = 0


Repeat
SetBuffer BackBuffer()

If KeyDown(205) Then Playerwinkel = Playerwinkel + 7
If KeyDown(203) Then Playerwinkel = Playerwinkel - 7

If Playerwinkel > 359 Then Playerwinkel = 0
If Playerwinkel < 0 Then Playerwinkel = 359


DrawImage Player(Playerwinkel),Playerx,Playery

If KeyDown(200) Then
Playerxspeed = Cos(Playerwinkel)
Playeryspeed = Sin(Playerwinkel)
Playerxspeedold = Playerxspeedold + Playerxspeed ;<---------
Playeryspeedold = Playeryspeedold + Playeryspeed ;<---------
EndIf


Playerx = Playerx + Playerxspeedold
Playery = Playery + Playeryspeedold


;If KeyDown(15) Then Stop

Flip
Delay 30
Cls
Until KeyHit(1)
End

matte

BeitragMo, Apr 04, 2005 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

du begrenzt nirgends die Geschwindigekeit. Also in deine Gas-Geben-Routine noch eine IF-Anweisung reinpappen.

Etwas so

Code: [AUSKLAPPEN]
If PlayerXSpeed<MaxXSpeed then PlayerXSpeed=PlayerXSpeed+dspeed


EDIT: Warum quälst du dein Programm mit Delay? Wenn' s dir zu schnell wird verkleiner doch ein paar Werte. Und schreib SetBuffer BackBuffer() vor die Repeat-Schleife.
 

-BB Noob-

BeitragDi, Apr 05, 2005 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist ja wenn ich die X-Gewschwindigkeit begrenze, und sie ab einem bestimmten Wert nicht mehr höher geht, dann fährt das Auto ziemlich komisch, mit sehr unphisikalischen Kurven. Very Happy

Achja, das delay ersetzte ich natürlich noch. Ist ja bisher nur so ein Testprogramm. Von Setbuffer Backbuffer() außerhalb der Schleife hab ich noch nie was von gehört. Muss ich mal ausprobieren.

matte

BeitragDi, Apr 05, 2005 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde sowieso das dein Code ein bißchen unübersichtlich ist. Meines Erachtens brauchst du um ein Autogeschwindigkeit zu definieren nur 2 Variablen. Das ist die Geschwindigkeit und die Richtung.



BlitzBasic: [AUSKLAPPEN]
If KeyDown(gas) And speed<speedmax Then speed=speed+speeddiff 
If KeyDown(bremse) And speed>0 Then speed=speed-speeddiff
If KeyDown(rechts) Then phi=phi-phidiff
If KeyDown(links) Then phi=phi+phidiff

phi=phi Mod 360 ; das reicht um phi zu begrenzen

spielerx=spielerx+speed*Cos(phi)
spielery=spielery-speed*Sin(phi)


Da ist jetzt noch nichts mit Trägheit oder Rollwiderstand drinnen. Aber es ist erstmal ein übersichtlicher Code auf dem du (wenn du magst) aufbauen kannst. Trägheit könntest du zum Beispiel mittels eines zweiten Winkels einbauen, aber sowas hab ich auch hier im Forum schon gelesen...

EDIT: Siehst du, da unten stehts schon...
  • Zuletzt bearbeitet von matte am Di, Apr 05, 2005 20:18, insgesamt 2-mal bearbeitet

Firstdeathmaker

BeitragDi, Apr 05, 2005 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Trägheit:

BlitzBasic: [AUSKLAPPEN]
AppTitle \"NoName\" 
SeedRnd MilliSecs()
Graphics 800,600,0,2

AutoMidHandle True
PlayerBild = LoadImage(\"PlayerBild.bmp\")



Dim Player(359)

For i = 0 To 359
Player(i) = CopyImage(Playerbild)
RotateImage Player(i),i
Next

;Vorgaben

Playerx# = 200
Playery# = 200
Playerwinkel = 50
Playerspeed# = 0
realPlayerspeed# = 0


Repeat
SetBuffer BackBuffer()

If KeyDown(205) Then Playerwinkel = Playerwinkel + 5
If KeyDown(203) Then Playerwinkel = Playerwinkel - 5

If Playerwinkel > 359 Then Playerwinkel = 0
If Playerwinkel < 0 Then Playerwinkel = 359


DrawImage Player(Playerwinkel),Playerx,Playery

If KeyDown(200) And playerspeed<5.1 Then
playerspeed=playerspeed+0.1
ElseIf playerspeed>0.1
playerspeed=playerspeed-0.1
EndIf

If playerspeed>realplayerspeed realplayerspeed=realplayerspeed+0.02
If playerspeed<realplayerspeed realplayerspeed=realplayerspeed-0.02

playerx = Cos(Playerwinkel)*realPlayerspeed+playerx
playery = Sin(Playerwinkel)*realPlayerspeed+playery

Text 10,10,\"Wunschspeed:\"+playerspeed
Text 10,20,\"Realschspeed:\"+realplayerspeed

;If KeyDown(15) Then Stop

Flip
Cls
Until KeyHit(1)
End
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Ornos

BeitragMi, Apr 06, 2005 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
edit: habe ich verschoben
  • Zuletzt bearbeitet von Ornos am Mi, Apr 06, 2005 12:44, insgesamt einmal bearbeitet

Jan_

Ehemaliger Admin

BeitragMi, Apr 06, 2005 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
also, ich mache das relativ einfach, indem ich den Speed begrenze,
BlitzBasic: [AUSKLAPPEN]

If KeyDown(200) Speed#=Speed#+0.1
Speed#= speed#*0.99


--> schnelle Beschleunigung, die nachlässt, bis zum Höchsttempo und Trägheit.
between angels and insects

Lord_Vader

BeitragMi, Apr 06, 2005 12:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ihr nehmt aber auch immer die einfache methode. Ich würde richtig mit Kräften und widerständen machen. Das ist ja wohl am realistischsten!

Is auch net zu schwer nur shice unübersichtlich!

Jan_

Ehemaliger Admin

BeitragMi, Apr 06, 2005 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Du, würdest Spamen.

Natürlich, wenn mans richtig machen will, dann mit kräften, reibung, Trägheit, Kollisionen der Lienien...

Da ist viel dabei, was du nciht hinbekommen wirst.

Lord_Vader, Beginner fragen!
Beim anderen Spammst du, hier der Scheiß, was soll das?
between angels and insects

Ornos

BeitragMi, Apr 06, 2005 12:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@jan

sag doch nicht, das man das nicht hinbekommt, man kann alles schaffen, man braucht halt nur viel zeit...oder hilfe Wink
 

-BB Noob-

BeitragMi, Apr 06, 2005 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Firstdeathmaker hat Folgendes geschrieben:
Trägheit:

BlitzBasic: [AUSKLAPPEN]
AppTitle \"NoName\" 
SeedRnd MilliSecs()
Graphics 800,600,0,2

AutoMidHandle True
PlayerBild = LoadImage(\"PlayerBild.bmp\")



Dim Player(359)

For i = 0 To 359
Player(i) = CopyImage(Playerbild)
RotateImage Player(i),i
Next

;Vorgaben

Playerx# = 200
Playery# = 200
Playerwinkel = 50
Playerspeed# = 0
realPlayerspeed# = 0


Repeat
SetBuffer BackBuffer()

If KeyDown(205) Then Playerwinkel = Playerwinkel + 5
If KeyDown(203) Then Playerwinkel = Playerwinkel - 5

If Playerwinkel > 359 Then Playerwinkel = 0
If Playerwinkel < 0 Then Playerwinkel = 359


DrawImage Player(Playerwinkel),Playerx,Playery

If KeyDown(200) And playerspeed<5.1 Then
playerspeed=playerspeed+0.1
ElseIf playerspeed>0.1
playerspeed=playerspeed-0.1
EndIf

If playerspeed>realplayerspeed realplayerspeed=realplayerspeed+0.02
If playerspeed<realplayerspeed realplayerspeed=realplayerspeed-0.02

playerx = Cos(Playerwinkel)*realPlayerspeed+playerx
playery = Sin(Playerwinkel)*realPlayerspeed+playery

Text 10,10,\"Wunschspeed:\"+playerspeed
Text 10,20,\"Realschspeed:\"+realplayerspeed

;If KeyDown(15) Then Stop

Flip
Cls
Until KeyHit(1)
End



Ich glaube bei deinem Code würde nur die Geschwindigkeit Träge sein.
Das heißt wenn man das Auto dreht und dann Gas drückt fährt man sofort in die Richtung ohne zu "rutschen".
(Hab ich allerdings noch nicht ausprobiert, kann natürlich sein das ich meine Vermutung falsch ist.)

Firstdeathmaker

BeitragMi, Apr 06, 2005 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, aber in so einem Fall würde ich die Seitenkräfte extra berechnen und dazufügen.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

-BB Noob-

BeitragDo, Apr 07, 2005 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wie macht du das?
Weil die Seitenkräfte werden doch irgentwann zu hoch und man kann da ja auch kein Limit einbauen, weil sich dann das Auto komisch bewegt.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group