2009-05-30 20 views
5

Chcę animować obiekty MoviveClips/Sprite tak płynnie, jak to możliwe. Jednak do tej pory jedyną metodą, która działa, jest umieszczenie kodu ruchu w module obsługi zdarzenia EnterFrame. Jest jeden problem z tym podejściem: kiedy ilość klatek na sekundę na konkretnej maszynie jest poniżej pożądanego framerate, cała gra zwalnia. Chcę móc to robić w sposób niezależny od czasu.ActionScript 3: Płynna animacja programistyczna

Odpowiedz

12

Istnieją dwa sposoby na programową animację w odtwarzaczu Flash. Pierwsze, które już wskazałeś, używając onEnterFrame. Jak już jednak zauważyłeś, aby uzyskać płynną animację, musisz zwiększyć ogólną liczbę klatek filmu. Wykonanie tej czynności spowoduje również zwiększenie obciążenia procesora przez cały czas działania pliku SWF. To nie jest coś, czego zawsze chcesz.

Innym sposobem na programową animację jest użycie zegara. W ramach obsługi zegara można wywołać funkcję o nazwie updateAfterEvent, która aktualizuje ekran niezależnie od ustawionego FPS dla SWF. Dlatego użycie timera pozostawia bramę do zrobienia płynnej animacji w odtwarzaczu Flash bez zwiększania ogólnej szybkości odtwarzania pliku SWF.

Dwa lata temu postanowiłem stworzyć własne biblioteki tween dla Flasha (z powodu moich frustracji z dostępnymi wówczas bibliotekami tween). Wydałem go pod nazwą Coretween, a ta biblioteka pozwala między innymi wybrać preferowany typ animacji dla każdej animacji. Na stronie dokumentacji podam example różnicę między animacją opartą na klatkach i opartą na czasie. Przykładowy plik SWF na tej stronie działa z szybkością 12 klatek na sekundę, ale jak widać, dolne kółko jest o wiele bardziej płynne, ponieważ jest sterowane zegarem o wartości 60 klatek na sekundę i aktualizuje ekran zależny od szybkości klatek SWF. Pamiętaj jednak, że nawet zegar tyka przy 60 fps w rzeczywistości Flash Player nigdy nie będzie w stanie osiągnąć tej liczby klatek na sekundę. Będzie jednak starał się osiągnąć tę liczbę klatek na sekundę, co spowoduje znacznie lepszą animację.

Niestety do tej pory nie byłem w stanie wydać wersji 1.0 mojej biblioteki, ale z tego, co wiem, jest całkiem stabilna. Możesz z niego korzystać w dowolny sposób, jaki uznasz za stosowny. Korzystałem z CENTween w wielu komercyjnych produkcjach, w tym w tym banku, który zrobiliśmy dla Ciebie w Australii, w banku StGeorge.

+0

Awesome! Właśnie to czego potrzebuje. Będę czekać z akceptacją, aby uzyskać więcej upvotes :) – George

+0

Dzięki. Ludzie mogą nadal głosować, gdy odpowiedzi są akceptowane. :) – Luke

+0

Pytania bez zaakceptowanych odpowiedzi zwykle są bardziej uważne. Większość użytkowników nie przejmuje się przywracaniem odpowiedzi po jej zaakceptowaniu. – George

2

Oto kilka bibliotek animacji opartych ActionScript:

TweenMax

Tweener

Oboje pracują dobrze i powinno pomóc, co trzeba.

+0

Niestety nie, ponieważ potrzebuję płynnej kontroli nad moimi obiektami w czasie rzeczywistym. Metoda tweener, która gwarantuje, że czasami w przyszłości obiekt dotrze do pożądanej pozycji, jest "ungood". – George