2011-09-25 12 views
13

w Cocos2d Będę odtwarzać animację. Animacja ma około 12 klatek, a każda klatka jest dość duża. W rzeczywistości wersja -hd każdej klatki jest dość duża.Kiedy używać CCSpriteBatchNode?

W każdym razie, najpierw stworzyłem go poprzez umieszczenie wszystkich 12 klatek w teksturach za pomocą Zwoptex. Tekstura ma około 2048x2048.

To jest tak, że mogę animować CCSprite w CCSpriteBatchNode używając tej tekstury.

Ale wydaje mi się, że otrzymuję ostrzeżenie o poziomie 2 pamięci.

Teraz, gdy o tym myślę, nie sądzę, że CCSpriteBatchNode miał być użyty dla sprite'a z jednym. Sądzę, że było to przydatne tylko wtedy, gdy chciałeś narysować wiele duszków, które używają tej samej tekstury.

Więc chcę wiedzieć: czy powinienem animować duszek klatka po klatce (bez ogromnej tekstury)? Czy możliwe jest użycie tej ogromnej tekstury, ale w inny sposób?

Odpowiedz

24

Masz rację co do CCSpriteBatchNode. CCSpriteBatchNode jest podobny do węzła wsadowego: jeśli zawiera elementy podrzędne, będzie rysował je w jednym pojedynczym wywołaniu OpenGL (często określanym jako "losowanie wsadowe"), w przypadku braku CCSpriteBatchNode (w tym przypadku) zostanie wywołane "losowanie partii" tyle czasu, ile liczba dzieci (duszków).

CCSpriteBatchNode może odwoływać się do jednej i tylko jednej tekstury (jednego pliku obrazu, jednego atlasu tekstury), tj. Arkusza sprite'a utworzonego przez zwoptex. Tylko CCSprite, które są zawarte w tej fakturze, można dodać do CCSpriteBatchNode. Wszystkie CCSprites dodane do CCSpriteBatchNode są rysowane w jednym wywołaniu funkcji OpenGL ES. Jeśli CCSprite nie zostaną dodane do CCSpriteBatchNode, to dla każdego z nich będzie potrzebne wywołanie typu OpenGL ES, co jest mniej wydajne.

Zgodnie ze swoim scenariuszem, nie trzeba używać CCSpriteBatchNode, ponieważ w danym momencie jest tylko jedna struktura renderowana.

Więc chcę wiedzieć: czy powinienem animować duszek klatka po klatce (bez ogromnej tekstury)? Czy możliwe jest użycie tej ogromnej tekstury, ale w inny sposób?

To nie ma znaczenia. Będziesz ładować teksturę 2048 x 2048. Problemem do rozważenia jest to, dlaczego tylko jedna tekstura 2048 x 2048 daje ostrzeżenie o poziomie 2? ile takich tekstur ładujesz. BTW 2048 x 2048 jest obsługiwany tylko na iPod3G/iPhone3GS powyżej (co jest w porządku).

W przypadku ładowania wielu tekstur (co wydaje mi się prawdziwe). Musisz zaprogramować logikę, w której możesz zwolnić teksturę, gdy nie jest to konieczne. należy patrzeć na następujących metod:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:fileName]; 
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 
[[CCTextureCache sharedTextureCache] removeUnusedTextures]; 

ile animacja jest zainteresowana można utworzyć CCAnimation i używać, lub (w zależności od scenariusza) można użyć setDisplayFrame (ramki CCSpriteFrame);

Powiązane problemy