2D-Top-Down Physik?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: 2D-Top-Down Physik?

BeitragDo, Jul 14, 2016 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich hänge seit einigen Tagen an einem Problem: Habe schon rumprobiert, alles mögliche, aber ich bekomme nichts richtiges zustande...
Ich habe ein Spiel, in dem es möglich sein soll, Landfahrzeuge wie Autos zu fahren. Soweit so gut. Ich habe mir dafür einen Tilemaptype geschrieben, dieser funktioniert auch tadellos. Das Problem: Ich kann zwar ein Fahrzeug darstellen (funktioniert über sogenannte "Mapobjects", dies ist ein Type, von dem die Tilemap eine Liste hat. Dieser Type ist Abstrakt und hat in seiner Basisausführung nur X-Position, Y-Position, Z-Position (für den Layer) und Rotation, außerdem noch eine abstrakte Methode zum malen, etc.), weiß dann aber nicht, wie ich Physik auf dieses "anwenden" soll. Dabei hapert es leider an dem Verständnis, wie die Physik genau wirkt, und wie man dieses Verhalten simulieren kann... Was ich schon gesehen habe: Fast jedes Spiel definiert für Fahrzeuge ein "Center of Mass", was genau ist das? Hat das mit meiner Problematik zu tun, oder habe ich da was falschen aufgeschnappt?
Anhand des folgenden Beispiels kann ich demonstrieren woran ich gerade hänge: Ich stelle mir ein Auto vor, welches mit einer gewissen Geschwindigkeit in eine Richtung fährt. Nun wird eingelenkt. Woran erkenne ich, ob das Fahrzeug driften müsste? Wie sage ich, dass das Auto z.B. auf Gras viel schneller ins Driften kommt, als auf gewöhnlichem Asphalt? Wie verhält es sich mit nicht-Fahrzeugen, also beispielsweise Fässern? Gibt es eine triviale Funktion, mit der ich solche Sachen berechnen kann? Wie lege ich die Daten an? Muss ich praktisch in einer Tabelle die jeweiligen Reibkoeffizienten für unterschiedliche Materialien auflisten?
Viele Fragen, bitte nicht abschrecken lassen. Wahrscheinlich hilft es schon, wenn nur wenige davon beantwortet werden, dann kann man sich den Rest herleiten...
Ich erwarte keine fertigen Lösungen, sondern nur Lösungsansätze und bedanke mich schonmal im Voraus dafür!
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragDo, Jul 14, 2016 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Geh an das Problem nicht mit dem Anspruch ran, "realistische" Formeln benutzen zu wollen. Dazu brauchst du a) ein ganzes Physikstudium und b) vielleicht macht das in dem spiel gar keinen Spaß!
Du brauchst ein sinnvolle Näherung, damit es sich schnell berechnen lässt und die Leute die Reaktionen akzeptieren können.

Was du brauchst ist ein Verständnis von Masse & Beschleunigung und die dafür nötigen Variablen. Lass drifting und sowas bei dem ersten Versuch weg.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Midimaster

BeitragFr, Jul 15, 2016 9:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du sowas anfängst, machst Du dir einen Plan, der sich in mehren Stufen der Fahrphysik annähert.

In den ersten Stufen ist Dein "Physik"-Auto wie ein Punkt in der Mitte deines Wagens

Stufe 1.
Das Auto fährt in eine Richtung mit einer bestimmten Geschwindigkeit. Gas und Bremse ändern sofort diese Geschwindigkeit auf einen neuen Wert. Die Lenkung ändert sofort die Richtung auf eine neue Richtung.

Stufe 2
Das Auto fährt in eine Richtung mit einer bestimmten Geschwindigkeit. Die Reibung bremst es laufend ab. Daher muss Gas das ausgleichen. Gas addiert nun laufend etwas zur Geschwindigkeit. Die Bremse subtrahiert ständig was von der Geschwindigkeit. Die Lenkung addiert/ subtrahiert ständig was von der Richtung.

Beginne nun mit den Werten, die du addierst, subtrahiertst zu experimentieren.
Damit ist jetzt schon "driften" möglich. Ist die Lenkungswirkung sehr stark, wirkt es als ob der Wagen übersteuert. Ist die Lenkungswirkung zu schwach "rutscht" der Wagen aus der Kurve.

Ich sende Dir hier mal den Code aus meinem aktuellen Autorennenl:
BlitzMax: [AUSKLAPPEN]
' Gas hat Werte wie Drehzahlen eines Motors:1000-10000
If KeyDown(KEY_W)
Gas=Gas+ (20+40/Gang)
If Gas>10000 Then Gas=10000
EndIf

If KeyDown(KEY_S)
Gas=Gas-30
If Gas< 1000
Gas=1000
EndIf
EndIf

'Lenkung hat Werte von -0.5 bis + 0.5 Grad
If KeyDown(KEY_LEFT)
Lenkung=Lenkung +.01
If Lenkung > 0.5 Then Lenkung=0.5
EndIf
If KeyDown(KEY_RIGHT)
Lenkung=Lenkung -.01
If Lenkung <-0.5 Then Lenkung=-0.5
EndIf


' reifen bremsen das auto:
Gas=Gas*0.997
' auto versucht wieder in den Geradeauslauf zu kommen
Lenkung=Lenkung*0.99

'automatische Gangschaltung:
If (Gas>9800) And (Gang < 7) ' 9800
Gas=(Gas*Gang)/(Gang+1)
Gang=Gang+1
ElseIf Gas<1000
Gas=1000
Gang=1
ElseIf Gas<4000 And Gang>1
Gas=(Gas*Gang)/(Gang-1)
Gang=Gang-1
EndIf

'Geschwindigkeit wir aus Gas berechnet:
Speed=(Gas-1000)*Gang/180000.0

'auto-entity wir entsprechend versetzt:
Car.TurnEntity 0,Lenkung,0
Car.MoveEntity 10*Sgn(Lenkung)*(Speed*Lenkung)^2, 0, Speed


wie du erkennen kannst sind sehr viele Konstanten in den Formeln, die die Variablen LENKUNG und GAS beeinflußen. Hier kann man nun experimentell an den Stellschrauben drehen und die "Fahrpysik" verändern. Sehr schön siehts Du auch, wie eine Kombination von SPEED und LENKUNG das Auto nach links oder rechts versetzen dürfen. Physikalsicher Blödsinn, aber in meiner Pseudo-Physik ist es eben dadurch sehr "realistisch" geworden.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

CO2

ehemals "SirMO"

BeitragDi, Jul 26, 2016 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Entschuldigt, dass ich so spät erst antworte Embarassed

Ok, also lautet die Devise: Langsam angehen. Werde mich melden, sobald ich Erfolge verzeichnen kann!
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group