Jeśli masz dużo elementów (cząstek o złożonym kształcie), cząstek itp., Podejście do bufora bitmapy będzie znacznie szybsze. Bufor bitmap będzie również lepiej skalowany wraz ze wzrostem złożoności twoich duszków. Moduł renderujący wektor będzie działał wolniej dzięki bardziej złożonym kształtom lub animacjom animacji (animacja kształtu), ma jednak kilka innych zalet:
Możesz dowolnie skalować zasoby, a nawet przybliżać scenę bez utraty jakości.
Obracanie lub inne transformacje, takie jak pochylenie, będą znacznie łatwiejsze do wykonania na grafice wektorowej
Podsumowując, sprowadza się to do tego, jaką grę budujesz.
2. Używanie MovieClips zamiast bitmapowych arkuszy sprite
Myślę, że miałeś na myśli „bitmapy sprite-arkuszy”, a nie klasę AS3 Sprite ?
To naprawdę nie robi różnicy. Zawsze możesz zamienić animacje oparte na MovieClip na animowane mapy bitowe. Albo ręcznie, eksportując film do klatek i zamieniając go w arkusz sprite , lub dynamicznie, renderując arkusz sprite z MovieClip w czasie wykonywania. Oto jak bym to zrobił:
Utwórz instancję MovieClip i stop()to.
Utwórz new BitmapDataobiekt o tej samej szerokości i wysokości co klip filmowy.
Użyj metody draw () , aby wyrenderować MovieClip do BitmapData.
Przechowuj obiekt BitmapData w tablicy lub wektorze.
Przejdź do następnej klatki MovieClip i powtórz kroki 2–4, rób to, aż dojdziesz do ostatniej klatki MovieClip. Dobrym pomysłem jest również aktualizacja dwóch zmiennych o maksymalnej szerokości i maksymalnej wysokości klatek MovieClip (ponieważ mogą one zmieniać się z jednej klatki na drugą).
Teraz możesz połączyć wszystkie przechowywane obiekty BitmapData w arkusz Sprite-Arkusz (użyj BitmapData.copyPixels () )
3. Animacje sprite
Jak wspomniano w odpowiedzi na pierwsze pytanie, nie ma na to jednoznacznej odpowiedzi. Jeśli potrzebujesz wykonać wiele transformacji ze swoimi obiektami, np. skalowanie i obracanie jest prawdopodobnie lepsze przy użyciu renderera natywnego Flash. Jeśli masz predefiniowane animacje, które można wypalać na arkuszach duszków (ręcznie lub dynamicznie), i jeśli chcesz wyświetlić setki duszków w tym samym czasie, wybierz silnik renderowania bitmap.
Kiedy (jeśli?) Flash zacznie używać przyspieszania sprzętowego do renderowania, renderer copyPixel będzie prawdopodobnie wolniejszy niż renderer macierzysty.
Bart van Heukelom,
6
Powiedziałbym, że jeśli budujesz grę opartą na rastrze za pomocą spritów, idź z budowaniem niestandardowego rozwiązania do renderowania za pomocą BitmapData. Jeśli budujesz grę wektorową, skorzystaj z wbudowanych mechanizmów animacji za pomocą MovieClips.
Jeśli budujesz niestandardowe rozwiązanie do renderowania, praktycznie odrywasz się od Flasha, używając tylko ActionScript, aby osiągnąć to, czego potrzebujesz. Silnik flixel korzysta z tej metody i jest całkiem niezły. Wolę pisać własny silnik od zera, ale masz pomysł.
Korzystanie z wbudowanych mechanizmów animacji Flash działa najlepiej w przypadku gier opartych na wektorach, ponieważ można łatwo tworzyć zasoby biblioteki jako klipy filmowe, które można następnie tworzyć na żądanie w języku ActionScript. Używasz osi czasu podanej w klipach filmowych do obsługi animacji i odpowiedniego przenoszenia położenia duszka. Wszystkie BattleOn! gry takie jak Adventure Quest Worlds używają tej metody. Ładnie też wygląda.
Zakładam, że twoje ostatnie pytanie dotyczy korzystania z klasy Sprite zamiast klasy MovieClip do animacji wektorowych. Sprite to MovieClip bez osi czasu, więc stracisz wygodę zarządzania animacjami.
Chociaż powszechnie uważa się, że blitting jest szybszy, nie widziałem żadnych testów porównawczych. Niektórzy programiści wolą tylko blitting, ponieważ pozwala im traktować Flash jako bardziej ogólną maszynę wirtualną i sterować renderowaniem. Jeśli jednak podoba Ci się wbudowana lista wyświetlania (co robię), Flash może z przyjemnością przesuwać, skalować, obracać i stosować ładne efekty do setek wyświetlanych obiektów ekranowych (np. MovieClip, Sprites, Bitmapy) przy dużych częstotliwościach wyświetlania klatek, więc o ile mają dość małe wymiary, np. mniej niż 200 x 200 pikseli każdy. Możesz używać MovieClips bez użycia wektorów. Większość gier korzysta z zasobów bitmap niezależnie od używanego systemu. Czasami jednak przydatne jest układanie i animowanie zasobów bitmapowych na osi czasu, szczególnie jeśli pracujesz ze specjalistą od Flasha, a nie z twórcą pikseli. Ustawiając jakość sceny na NISKĄ, uzyskasz znacznie lepszą wydajność kosztem brzydszych transformacji. Flash nie renderuje żadnych obiektów poza ekranem, więc nie spowalniają cię.
Tam, gdzie Flash może zwolnić, porusza się i przekształca bardzo duże mapy bitowe - na przykład, jeśli masz bardzo duży poziom przewijania lub wiele warstw paralaksy. Hybrydowe podejście do używania MovieClipów do obiektów gry podczas blitowania tła z bufora ekranowego może być szybsze i pozwoli ci mieć nieskończenie duże poziomy, jednocześnie umożliwiając łatwość użycia standardowych Sprite'ów i MovieClipów.
Złożone kształty wektorowe mogą również mieć znaczący wpływ na wydajność. Jeśli masz animowane klipy filmowe z dużą ilością gradientów, a jeśli nie zwracasz uwagi na poziom szczegółowości twoich kształtów wektorowych, rysuje ono znacznie wolniej niż bitmapa.
bummzack
Możesz używać MovieClips bez użycia wektorów. Większość gier korzysta z zasobów bitmap niezależnie od używanego systemu. Czasami jednak przydatne jest układanie i animowanie zasobów bitmapowych na osi czasu, szczególnie jeśli pracujesz ze specjalistą od Flasha, a nie z twórcą pikseli.
Iain
Tak, w przypadku gier flash Polecam, aby nie używać gradientów do czegokolwiek, co ma być wektorem i renderowane przez flashowanie każdej klatki, oprócz kilku rzeczy na HUD i ikonce odtwarzacza. Gradienty szybko jedzą wydajność.
Powiedziałbym, że jeśli budujesz grę opartą na rastrze za pomocą spritów, idź z budowaniem niestandardowego rozwiązania do renderowania za pomocą BitmapData. Jeśli budujesz grę wektorową, skorzystaj z wbudowanych mechanizmów animacji za pomocą MovieClips.
Jeśli budujesz niestandardowe rozwiązanie do renderowania, praktycznie odrywasz się od Flasha, używając tylko ActionScript, aby osiągnąć to, czego potrzebujesz. Silnik flixel korzysta z tej metody i jest całkiem niezły. Wolę pisać własny silnik od zera, ale masz pomysł.
Korzystanie z wbudowanych mechanizmów animacji Flash działa najlepiej w przypadku gier opartych na wektorach, ponieważ można łatwo tworzyć zasoby biblioteki jako klipy filmowe, które można następnie tworzyć na żądanie w języku ActionScript. Używasz osi czasu podanej w klipach filmowych do obsługi animacji i odpowiedniego przenoszenia położenia duszka. Wszystkie BattleOn! gry takie jak Adventure Quest Worlds używają tej metody. Ładnie też wygląda.
Zakładam, że twoje ostatnie pytanie dotyczy korzystania z klasy Sprite zamiast klasy MovieClip do animacji wektorowych. Sprite to MovieClip bez osi czasu, więc stracisz wygodę zarządzania animacjami.
źródło
Chociaż powszechnie uważa się, że blitting jest szybszy, nie widziałem żadnych testów porównawczych. Niektórzy programiści wolą tylko blitting, ponieważ pozwala im traktować Flash jako bardziej ogólną maszynę wirtualną i sterować renderowaniem. Jeśli jednak podoba Ci się wbudowana lista wyświetlania (co robię), Flash może z przyjemnością przesuwać, skalować, obracać i stosować ładne efekty do setek wyświetlanych obiektów ekranowych (np. MovieClip, Sprites, Bitmapy) przy dużych częstotliwościach wyświetlania klatek, więc o ile mają dość małe wymiary, np. mniej niż 200 x 200 pikseli każdy. Możesz używać MovieClips bez użycia wektorów. Większość gier korzysta z zasobów bitmap niezależnie od używanego systemu. Czasami jednak przydatne jest układanie i animowanie zasobów bitmapowych na osi czasu, szczególnie jeśli pracujesz ze specjalistą od Flasha, a nie z twórcą pikseli. Ustawiając jakość sceny na NISKĄ, uzyskasz znacznie lepszą wydajność kosztem brzydszych transformacji. Flash nie renderuje żadnych obiektów poza ekranem, więc nie spowalniają cię.
Tam, gdzie Flash może zwolnić, porusza się i przekształca bardzo duże mapy bitowe - na przykład, jeśli masz bardzo duży poziom przewijania lub wiele warstw paralaksy. Hybrydowe podejście do używania MovieClipów do obiektów gry podczas blitowania tła z bufora ekranowego może być szybsze i pozwoli ci mieć nieskończenie duże poziomy, jednocześnie umożliwiając łatwość użycia standardowych Sprite'ów i MovieClipów.
źródło