Tut AS3-Event.ENTER_FRAME führen Sie auf jedem Bild immer? Sogar auf langsamen Computern?
Ich habe ein Skript, das sich auf ENTER_FRAME
- Ereignis jedes mal. Ich habe bemerkt, auf manchen langsameren Rechnern kann es einige Verzögerung, wenn ein flash-Film abgespielt wird.
Tut ENTER_FRAME
laufen auf jedem Bild, auch wenn es auf einem langsamen computer?
Wenn der flash-Film lag, hat die ENTER_FRAME
- Ereignis noch laufen und die Darstellung nur versuchen, Sie zu fangen?
Ist das ausführen von code auf ENTER_FRAME
eine zuverlässige Möglichkeit, um code auszuführen, jedes mal, wenn ein Rahmen eingetragen ist?
InformationsquelleAutor zechdc | 2011-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Yep. Jeder frame, keine Ausnahmen. Wenn etwas verlangsamt einen Film (entweder schwere scripts oder schwere Grafiken), es
Event.ENTER_FRAME
- Handler werden immer noch ausgeführt, bevor ein frame gerendert wird.Also, es ist generell eine gute Idee, ein
Timer
Instanz mitTimerEvent.TIMER
, selbst wenn es eine Verzögerung eingestellt werden, gleich 'ideal' frame-Dauer für Ihre Film fps. Datimer
handler ist nicht gebunden ausgelöst werden genau gleichmäßig erfolgt.Finden Sie unter dem folgenden link für mehr in-depth-Erklärung: Die Elastic Racetrack
Ich behaupte, dass weder genauer ist. Der wirklich wichtige Teil ist, zu verfolgen, delta Zeit zwischen den updates und mit delta-Zeit zu aktualisieren Sie Ihre Positionen, anstatt einen festen Wert "pro frame." Die delta-Zeit ist einfach "garantiert" werden, etwa die gleiche jedes mal, wenn die Funktion ausgeführt wird, wenn es einen timer, in der Erwägung, dass in der enter-frame-Schleife, es wird jedoch lange es dauert, für den gesamten rendering-Prozess, was bedeutet, dass Ihre delta-Zeit kann variieren Wild.
Es ist nicht generell eine gute Idee, einen Timer zu verwenden, die mit Ihrem ideale framerate, denn wenn die echte framerate verlangsamt, Ihre Timer-handler tun werden, Iterationen, deren Ergebnisse nie auf den Bildschirm gezeichnet. Tun Sie Ihre Logik in eine EnterFrame-Prozedur, und in diesem handler verwenden, getTimer (), um zu überprüfen, wie lange es seit dem letzten frame aktualisieren und entsprechend zu handeln.
Nox, egal was Sie tun, mit timer-Ereignisse oder getTimer, Sie werden garantiert, um ein frame-Ereignis vor jedem Neuzeichnen, also das ist der richtige Ort, um update-visuals. Ob die Zeit Messen, die das delta in jedem frame, und was damit zu tun, dass delta, hängt von den Inhalten und was Ihre Ziele sind. Es gibt aber keinerlei Wert für die Ausführung der Logik, die den Bildschirm aktualisiert, mehr oder weniger Häufig als der Bildschirm wird neu gezeichnet.
Auch:
Flash Player tries to maintain the amount of calls to TIMER event handler.
- dies ist nicht korrekt. In einem regelmäßigen Intervall (gesteuert durch den container, aber in der Regel alle 10-50ms oder so) Flash wird geprüft, ob das entsprechende Intervall verstrichen seit dem letzten timer-Ereignis, und wenn so ein Problem. Dann tut das gleiche für frames, dann wartet er noch 10-50ms und wiederholt. Es macht keinen Versuch, die zur Aufrechterhaltung einer bestimmten Reihenfolge von Ereignissen oder Ereignistypen.InformationsquelleAutor Nox Noctis
wenn Sie eine framerate einstellen um die 30fps, dann wird das event ausgelöst wird 30 mal pro Sekunde, solange Sie nicht legen Sie eine Last auf dem Prozessor, so dass die frame-rate drop. Deshalb, wenn die framerate ist schwankend, könnten Sie bekommen Sie mehr konsistente Ergebnisse mit einem timer-Ereignis.
on a side note, bewusst sein, dass...
Mit vielen Event-Handler erstellen können performance-Probleme auch (wenn Sie zu viele haben)
Jedes mal, wenn es heißt, flash muss ein Ereignisobjekt erstellen, das zumindest. Das bedeutet, dass Sie Speicher muss reserviert werden jedes mal, wenn das Ereignis ausgelöst wird. Dieser Speicher muss dann die garbage Collection zu einem späteren Zeitpunkt, und die garbage collection wird gleichzeitig die Ressourcen zu führen.
Wenn Sie haben haben viele Movieclips oder sprites, könnte es sinnvoll sein, zu haben, von einem controller verwaltet alle von Ihnen, anstatt jede mit einem eigenen EnterFrame-handler.
InformationsquelleAutor Daniel
Die Allgemeine Antwort auf eine Allgemeine Frage.
Wenn Sie möchten, zu verbessern die Leistung der Flash-Player dann berücksichtigen Sie folgende Punkte,
Verwenden Sie keine Striche, es sei denn, wenn es erforderlich ist. (Striche sind mehr cpu -
intensiv)
Weniger gradient Farben, wenn möglich.
Optimierten bitmaps wenn überhaupt.
Effektiv zu nutzen
addChild(yourObject)
,addChildAt(yourObject, index)
,removeChild(yourObject)
,removeChildAt(index)
.Hören
Event.ADDED_TO_STAGE
undEvent.REMOVED_FROM_STAGE
bzw.
Hören
addEventListener(somelistener, somefunction);
removeEventListener(somelistener, somefunction);
Hören
Event.ACTIVATE
undEvent.DEACTIVATE.
Wenn Objekte geladen sind, extern, dann stellen Sie sicher, zu verwenden
unloadAndStop()
um vollständig zu entfernen unnötigeobjects
aus
die Bühne.
InformationsquelleAutor Rajneesh Gaikwad
Check this out für alle, die sich für eine framerate-unabhängige Lösung... dieser Kerl ist wirklich intelligent und hat eine Technik, die für beide animieren sich konsequent über mehrere Frameraten (langsameren Geräten, desktops, etc) und wenn Sie Ihr Objekt von der Bildrate unabhängig von deiner timeline framerate. Check it out hier. Tipps 4 & 5. Hoffe, das hilft!
Fand ich, dass die timer-Klasse ist eigentlich sehr widersprüchlich, wenn die Maischen Tasten, manchmal ist der timer genau das schlägt fehl, um einen Zyklus zu beenden und den TIMER.COMPLETE-Ereignis wird nie erreicht, wenn ich hatte 5 Zyklen von 100ms, es würde einfach aufhören nach 3 Zyklen... Auch, framerate ausgelöst wird jeden frame, aber ES IST NICHT KONSISTENT!!! Wenn Sie lag auf der CPU, die Bildwiederholrate sinkt und daher Sie nicht haben, etwas zu aktualisieren in regelmäßigen Abständen, aber eher unabhängig von der aktuellen framerate ist. Überprüfen Sie heraus diesen link, es gibt sogar einige framerate-code, den Sie verwenden können, auf Ihre Projekte zu überprüfen.
InformationsquelleAutor Bacon Neck Games