2011-01-08 15 views
1

Ich habe ein Spiel mit Flex entwickelt und die Timer-Klasse verwendet, um die Hauptschleife in Gang zu halten.Probleme mit dem Enterframe-Event

Wenn ich jedoch versuchte, mit dem enterFrame-Ereignis die Hauptschleife auszuführen, gab es ein paar Probleme.

Zunächst schien Physik-Simulation viel zu schnell. Wird das Ereignis enterFrame mehr als einmal pro Frame aufgerufen? Ich setze die globale Bildrate der Anwendung auf 24, also sollte die Anwendung das Ereignis nicht jede 1/24 Sekunde auslösen?

Und das zweite Problem ist, dass wenn das Spiel so läuft, einige MXML-Komponenten, die hinzugefügt werden, nicht angezeigt werden. Ich habe absolut keine Ahnung, warum das passiert.

Hilf mir bitte?!?

Danke.

+0

Einige Frames länger als andere zu machen nehmen. Wenn Sie den FPS auf 24 setzen, wird ein neuer Frame * grob * 24 Mal pro Sekunde gerendert, aber nicht genau. Das Enter-Frame-Ereignis wird nur einmal pro Frame gesendet. Es ist jedoch möglich, dass Sie denselben Ereignis-Listener mehrmals hinzugefügt haben (was dazu führt, dass diese Funktion mehrmals pro Frame aufgerufen wird). Was war dein Timerintervall? Außerdem können wir nicht mit den fehlenden Komponenten helfen, es sei denn, wir sehen etwas Code (der Teil, wo sie hinzugefügt werden, wäre ein guter Anfang) – Cameron

+0

Verwenden Sie Box2D für Ihre Physik? – Zevan

+0

Yeah, Box2DFlash für die Physik – user434565

Antwort

2

Zählen Sie nicht, dass die Framerate gerade ist, oder dass der Enterframe in einem festen Intervall aufgerufen wird. Selbst die Timer-Klasse ist nicht 100% genau.

Verwenden Sie bei Timings immer das Delta zwischen Frame-Updates und verwenden Sie dieses Delta für Ihre Berechnungen. Stellen Sie außerdem sicher, dass das Delta niemals einen Wert überschreitet, um merkwürdiges Verhalten zu vermeiden, wenn die Flash-Anwendung aus einem unerwarteten Grund einfriert.

Dieser Artikel erklärt alles perfekt: http://gafferongames.com/game-physics/fix-your-timestep/

1

Die Framerate ist ein gewünschter Wert. Wenn ein Benutzer es auf einem langsamen Computer ausführt, ist die Ausgabe möglicherweise zu langsam. Wie wäre es wieder mit dem guten alten setInterval?

+0

+1, du hast recht mit der Bildrate. 'setInterval' wird jedoch keine langsame Maschine schneller machen. –