2013-08-15 12 views
6

Używam pamięci podręcznej klatek sprite do wysyłania plistów i arkuszy sprite, aby użyć jej do animacji. Mam 2 podejścia do tego i jestem pewien, że jeden z nich jest źle.Używanie bufora podręcznego ramki w cocos2d - właściwa droga

  1. muszę załadować wszystko mogę buforować na początku, bo to wymaga czasu, więc na początku sceny załadować wszystko co potrzebne do bliskiej przyszłości. (Ale teraz moja skrzynka jest pełna!)

  2. Pamięć podręczna powinna pozostać tak pusta, jak tylko mogę, więc ładuję się do pamięci podręcznej w chwili, gdy uruchamiam animację (zajmuje to trochę czasu, nie jest to, myślę, że powoduje to kliknięcie mojej gry), i usuń ją na w tej samej chwili z tym skończyłem. (teraz pamięć podręczna nie jest pełna, ale muszę ładować/przeładowywać wiele razy.)

  3. do i trzeba uważać, aby za każdym razem usunąć nieużywane duszki z pamięci podręcznej?

obciążenie pamięci podręcznej jest:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrameByName:@"stopAnim.plist"]; 

usuwając nieużywane jest:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 

widzę w moim iPadzie, że system stara się usunąć nieużywane ikonek oraz mieć problemy. jaka jest dokładnie droga do pracy?

Odpowiedz

3

Po wielu badaniach, doszedłem do pewnych wniosków:

Po pierwsze, nie ma czasu na załadowanie klatek w czasie rzeczywistym (podczas gdy animacja jest początkowy) do batchNode, aw przypadku dużych obrazów (iPad) czasami zamraża scenę.

Tak więc, w niektórych przypadkach tak, należy załadować obrazy buforować w metodzie init, aby tego uniknąć, ponieważ nie ma innego sposobu, a to dlatego mamy cache i tak:

[[CCTextureCache sharedTextureCache] addImage:@"the_heavy_image.png"]; 

a jeśli ta animacja ma miejsce często, nie chcesz jej usuwać z pamięci podręcznej.

inne rzeczy powinny być usuwane z pamięci podręcznej, jeśli nie używać go

[[CCTextureCache sharedTextureCache] removeUnusedTextures]; 

usunie z pamięci podręcznej tylko ikonek, które zostały usunięte z ekranu już.

jej nie wystarczy po prostu usunąć Ramki:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 

W innych sytuacjach, gdzie duchy arkusze obrazy nie są tak duże, można załadować je do batchNode w momencie animacja jest starty i usuń ich na końcu.

Powiązane problemy