Hallo,
die GameLoop ist der Kern eines Spiels, das steht fest.
Nun habe ich mir das GameLoop Tutoriel, das unter der URL "http://dewitters.koonsolo.com/gameloop.html" zu finden ist, durchgelesen und mir ist diesbezüglich eine Frage zu der letzten GameLoop - Variante (Constant Game Speed independent of Variable FPS) aufgekommen.
In welcher Funktion prüfe ich, ob eine Kollision stattgefunden hat?
In der updateGame oder displayGame Funktion?
Angenommen ich prüfe die Kollision zwischen Objekten in updateGame und in displayGame berechne ich die neue Position des Objektes und zeichne es. Da displayGame viel häufiger aufgerufen wird als updateGame könnte doch geschen, dass ein Objekt das andere passiert, bevor eine Kollsion in updateGame bemerkt wird?
Danke im Voraus .
ps: Bin neu in der Spieleprogrammierung.
Bearbeitet von SirMr auf 10. Januar 2010 19:53
Hey SirMr,
solche Sachen sollten auch immer in updateGame() gepackt werden, da logischerweise Werte verändert werden.
displayGame() ist zum Zeichnen gedacht und sollte auch für nichts anderes verwendet werden.
kurdt schrieb:
Hey SirMr,
solche Sachen sollten auch immer in updateGame() gepackt werden, da logischerweise Werte verändert werden.
displayGame() ist zum Zeichnen gedacht und sollte auch für nichts anderes verwendet werden.
Hmm, warum dann eine hohe Framerate?
Wenn die Position der Objekte nur in der updateGame Funktion gändert wird, dann ist es nur eine Verschwendung von CPU Zyklen die displayGame Funktion ünnötig oft aufzurufen - das Dargestellte veränderst sich schließlich nur nach dem Aufruf von updateGame.
Wie realisieren ich die Bewegung von schnellen Objekten?
Zum Beispiel: Zwei Autos, eines fährt 100km/h, das andere 1000km/h. Es würde doch nicht
funktionieren, das schnelle Auto jedesmal um 10 Pixel zu verschieben und das langsame nur um ein Pixel. Dann würde es doch so aussehen, als ob das schnelle Auto springt.
Bearbeitet von SirMr auf 10. Januar 2010 21:38
SirMr schrieb:
Wie realisieren ich die Bewegung von schnellen Objekten?
Zum Beispiel: Zwei Autos, eines fährt 100km/h, das andere 1000km/h. Es würde doch nicht
funktionieren, das schnelle Auto jedesmal um 10 Pixel zu verschieben und das langsame nur um ein Pixel. Dann würde es doch so aussehen, als ob das schnelle Auto springt.
Das realisierst du wie gehabt.
So und ich hab mal flink dieses Tutorial überflogen. Du übergibst der renderGame() in diesem Fall einen Interpolationwert den du mit der Geschwindigkeit jedes Objects multiplizieren und dann zur aktuellen Position hinzuaddieren musst.
Durch dieses Interpolationsverfahren verhinderst du dann eben das sich das schnelle Auto mit 10 Pixel so sprunghaft vorbewegt da diese 10 Pixel dann v/s repräsentieren. Es bewegt sich 10 Pixel in einer Sekunde vorwärts, z.B.
Dies ist dann unabhängig von der FPS Rate und der zugrunde liegenden Hardware.
PS: Es ist früh am Morgen und ich bin noch ziemlich müde, bei Unverständlichkeit einfach warten bis ich die restlichen Vorlesungen gar ausgepennt hab ...
Bearbeitet von kurdt auf 11. Januar 2010 09:49