2009-05-30 18 views
5

Desidero animare gli oggetti MoviveClips/Sprite nel modo più uniforme possibile. Tuttavia finora l'unico metodo che funziona è inserire il codice di movimento nel gestore di eventi EnterFrame. C'è un problema con questo approccio: quando il framerate su una macchina specifica è inferiore al framerate desiderato, l'intero gioco rallenta. Voglio essere in grado di farlo in modo indipendente dal tempo.ActionScript 3: Animazione programmatica uniforme

risposta

12

Esistono due modi per eseguire l'animazione programmatica all'interno del lettore Flash. Il primo che hai già indicato usando onEnterFrame. Tuttavia, come avrai già notato, per ottenere un'animazione fluida devi aumentare la frequenza fotogrammi complessiva del filmato. In questo modo aumenterà anche il carico della CPU per l'intero periodo di tempo in cui viene eseguito il SWF. Questo non è qualcosa che vuoi sempre.

L'altro modo di eseguire l'animazione programmatica è utilizzando un timer. All'interno di un gestore di timer è possibile chiamare una funzione denominata updateAfterEvent che aggiornerà lo schermo indipendentemente dall'FPS che avresti impostato per il tuo SWF. Pertanto, l'utilizzo di un timer lascia un gateway per eseguire animazioni fluide all'interno del player Flash senza aumentare la frequenza fotogrammi complessiva del file SWF.

Due anni fa ho deciso di creare le mie librerie di tween per Flash (a causa delle mie frustrazioni con le librerie di tween esistenti disponibili). L'ho rilasciato con il nome Coretween e questa libreria ti consente, tra le altre cose, di scegliere il tipo di animazione che preferisci per ogni singola interpolazione. Nella pagina della documentazione do uno example della differenza tra animazione basata sul frame e basata sul tempo. Il file SWF di esempio su quella pagina viene eseguito a 12 fps ma, come puoi vedere, le interpolazioni del cerchio inferiore risultano molto più fluide perché controllate da un timer che fa tic tac a 60 fps e aggiorna lo schermo in-dipendentemente dalla frequenza fotogrammi del file SWF. Tieni a mente che anche se il timer scandisce a 60 fps, in realtà il Flash Player non sarà mai in grado di raggiungere questo frame rate. Tuttavia, cercherà di ottenere questa frequenza fotogrammi che si tradurrà in un'animazione generale molto più fluida.

Purtroppo fino ad ora non sono stato in grado di rilasciare una versione 1.0 della mia libreria, ma per quanto ne so è abbastanza stabile. Sei più che benvenuto ad usarlo in qualsiasi modo tu ritenga opportuno. Ho usato Coretween in molte produzioni commerciali tra cui quella che abbiamo fatto per la banca StGeorge qui in Australia.

+0

Fantastico! Proprio quello di cui ho bisogno. Aspetterò con l'accettazione, in modo da poter ottenere più upvotes :) – George

+0

Grazie. Le persone possono ancora votare quando viene accettata una risposta. :) – Luke

+0

Le domande senza risposta accettata di solito ottengono più attenzione. La maggior parte degli utenti non si preoccupa di mandare indietro una risposta dopo essere stata accettata. – George

2

Ecco alcune librerie di animazione basate Actionscript:

TweenMax

Tweener

Entrambi funzionano bene, e dovrebbe aiutare con quello che vi serve.

+0

Sfortunatamente no, dal momento che ho bisogno di controllo regolare in tempo reale sui miei oggetti. Il metodo tweener, che garantisce che a volte in futuro l'oggetto arriverà alla sua posizione desiderata è "non buono". – George

Problemi correlati