2008-10-01 15 views
5

Mam pytanie dotyczące pętli w pamięci flash ....flash: na pętle działające wolno

W grze z kafli robię mini mapę całego poziomu. Sposób renderowania mapy jest funkcją z pętlą for w innej pętli for. Przechodzi przez każdą pozycję płytki i dołącza element mapy (w zasadzie kwadrat o wymiarach 3x3 piksele), który jest kolorowy w zależności od tego, co jest płytką. W każdym razie, moim problemem jest to, że kiedy poziom staje się duży jak płytki 50x50, ponowne mapowanie trwa wiecznie (do 3 sekund). Czy mimo to to naprawić? A może jest inny sposób na zrobienie mini-mapy? Jeśli poziom się zwiększy, może to potrwać około 10 sekund!

Każda pomoc jest doceniana!

Dzięki Matt

+0

Czy możesz podać przykład kodu? Czy to jest as2 czy as3? – defmeta

Odpowiedz

0

To nie powinno trwać długo na pętlach sami pracować, lecz co właściwie robisz wewnątrz każdej pętli? Jakie są operacje związane z dołączaniem i kolorowaniem elementu mapy?

-Adam

+0

Zgadzam się, będzie to powolny rysunek, że wiele obiektów, ale 3 sekundy to trochę ponad. – grapefrukt

3

Flash nie czyni płytki bardzo szybko. Świetnie spisuje się w grafice, która nie zmienia się w buforze i szybko szybko wyświetla ten bufor. Każdy obiekt graficzny (lub ikonka) dodawany jako dziecko do sceny musi być renderowany niezależnie.

Twoim problemem jest flashowanie, aby narysować 50x50 = 2500 płytek na klatkę! Nawet jeśli mają wymiary 3 x 3 piksele, flash nadal traktuje je jako oddzielne obiekty.

Byłoby miło, gdybyś mógł przechowywać wszystko w buforze lub jednym obiekcie i wyświetlać. Więc spróbuj rysować te kafelki 3x3 w tym samym obiekcie zamiast wielu obiektów. Może to jednak przeszkadzać w funkcjonowaniu, ponieważ cały obiekt będzie musiał być ponownie renderowany w każdej klatce.

Niektóre inne sugestie mogą dotyczyć renderowania obiektów w większych komórkach na siatce. Zamiast mieć 50x50, zacznij od 10x10, a następnie narysuj 5x5 komórek w każdej komórce. To prawdopodobnie przyspieszyłoby sytuację.

Mam nadzieję, że to pomoże. Jeśli znajdziesz dobre rozwiązanie, opublikuj!

1

Tak. Sama pętla wcale nie trwa długo. Ale w każdej iteracji dołączam klip filmowy z biblioteki. Przy okazji nie robi się tego na enterFrame, tylko wtedy, gdy użytkownik naciśnie przycisk Pause (spacja).

1

Najprawdopodobniej (jak wspomniano tutaj) twoja pętla jest wolna. Liczenie 0-2500 jest bardzo szybkie, ale jeśli wykonujesz ciężkie obliczenia w każdej iteracji, to się sumuje. Oczywiście, nie widząc kodu, nie możemy ci w tym pomóc. Chociaż można zrobić sztuczki, aby uruchomić tę samą pętlę (np. W wielu klatkach), ale jeśli jest to pętla 3-sekundowa, prawdopodobnie można zrobić wiele, aby ją zoptymalizować - może nawet do tego stopnia, że ​​będzie wystarczająco gładka , aby nie powodowało zbyt długiego czekania.