2012-02-21 13 views
5

W jaki sposób Flash radzi sobie z elementami, które są poza sceną?Czy obiekty Off-Stage DisplayObjects we Flashu spowalniają moją grę?

Oczywiście Flash tak naprawdę nie renderuje ich (ponieważ nie pojawiają się one nigdzie na ekranie), ale jest procesem renderowania ich nadal istnieje, spowalniając moją grę tak bardzo, jak by to było, gdyby elementy były włączone. ekran?

Czy Flash inteligentnie ignoruje elementy, które nie pasują do renderowalnego obszaru?

Czy mogę ręcznie usuwać obiekty z DisplayList i dodawać je ponownie jako wyjście i wchodzić na scenę, czy to nie ma znaczenia?

+1

Możesz napisać prosty test. Mimo że nie są renderowane, nadal znajdują się w hierarchii i mogą wykonywać pewne nieprzyjemne rzeczy, takie jak animowanie, wykonywanie skryptów i wysyłanie ton zdarzeń. –

+0

Myślę, że rzeczywisty rysunek obiektów je większość wydajności - więc gdy są poza sceną, która nie powinna stanowić problemu. ale jak powiedział Valentin, kiedy wciąż "wykonują skrypty i/lub wysyłają masę wydarzeń", zdecydowanie spowalniają całą grę. jeśli nie pojawią się ponownie na scenie, zniszcz je - jeśli tak będzie, spróbuj "wstrzymać" je, dopóki nie pojawią się ponownie ... – pkyeck

+0

Zgadzam się, że powinieneś napisać kilka testów, zdobyć całą masę obiektów i animować je w poprzek i wyłączając na ekranie, używając profilera Flash Builder, powinieneś być w stanie zlokalizować dowolne szyjki butelek. Chciałbym przetestować, widząc, jak znikają z ekranu, a także testować removeChild() i widoczne po wyłączeniu ekranu, nie należy jednak używać alpha 0. – Neil

Odpowiedz

2

Tak, spowalniają twoją grę.

W jednym z moich wczesnych eksperymentów opracowałem grę w sidescroller z wieloma NPC-ami rozsianymi po mapie, nie wszystkie widoczne na tym samym ekranie. Nadal miałem do kalkulowania rzeczy, ale nie było ich na ekranie. Wydajność była znacznie lepsza, gdy usunąłem z listy wyświetlanie ich braku, gdy nie ma to znaczenia (po prostu sprawdzając ich X w stosunku do "kamery"). Ponownie, nie mówię o dodatkowym kodzie i wydarzeniach, które mogą być do nich dołączone, tylko zwykłym graficznym dzieciom klipu filmowego.

Jednak najlepszą praktyką jest rysowanie obiektów w bitmapy. Oczywiście, jeśli jesteś już zbyt zagłębiony w grę, może to być nieistotne, ale jeśli masz czas, aby zainwestować, jest to jeden z najlepszych sposobów, aby jak najlepiej wykorzystać AS3 w grach 2D. Znalazłem kilka z najlepszych samouczków dotyczących bitmap i AS3 w 8bitrocket http://www.8bitrocket.com/books/the-essential-guide-to-flash-games/ Mogę rozwinąć temat, jeśli chcesz, ale myślę, że wychodzę z tematu tutaj.

+0

Dobre tło - i dobra rada dotycząca bitmap; to jest coś, co robię teraz od dłuższego czasu. – Marty

0

Nawet jeśli niektóre obiekty wyświetlane znajdują się poza obszarem sceny, nadal są wykonywane. Jeśli mają w sobie jakąś animację, może to spowolnić działanie.

Pojawia się pytanie, dlaczego musimy pozostawiać niewykorzystane przedmioty poza obszarem sceny? jeśli chcesz "cache" film Clips dla szybszego ładowania, a następnie załaduj je w klatce kluczowej, gdzie kontrola nigdy nie pójdzie. na przykład załaduj obiekty wyświetlane, które chcesz pokazać w ramce 1, a następnie umieść ogranicznik() w panelu działań ramki, ustaw jako klatkę kluczową, aw ramce 2 załaduj nieużywane animacje. ponieważ w klatce 1 występuje zatrzymanie(), kontrola nigdy nie przechodzi do klatki 2, ale obiekty wyświetlane są buforowane.

Jeśli masz kody w niewidocznych obiektach wyświetlanych i musisz je załadować wraz z głównymi komponentami gry, spróbuj umieścić stop() w ramkach nieużywanych obiektów wyświetlanych, aby nie były animowane .

Powiązane problemy