2013-08-15 2 views
6

Sto utilizzando la cache del frame dello sprite per caricare i plists e i sprite-sheets da utilizzare per l'animazione. ho 2 approcci a quello e sono sicuro che uno di loro è sbagliato.Uso della cache del frame dello sprite in cocos2d: il modo corretto

  1. devo caricare tutto il possibile per mettere in cache alla partenza perché ci vuole tempo, quindi all'inizio della scena i Carico tutto quello che mi serve al prossimo futuro. (Ma ora il mio cache è piena!

  2. cache dovrebbe rimanere il più vuoto possibile, quindi sto caricando in cache al momento in cui inizio l'animazione (ci vuole un po 'di tempo non è vero? Penso che scatta il mio gioco), e rimuoverlo a nello stesso momento ho finito con questo. (ora la cache non è piena ma devo caricarla/ricaricare più volte.)

  3. do i devono occuparsi di rimuovere gli sprite non utilizzati dalla cache ogni volta?

carico di cache è:

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

rimozione inutilizzato è:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 

posso vedere nel mio iPad che il sistema sta cercando di rimuovere le sprite inutilizzati e hanno problemi. che cosa è esattamente il modo di lavorare?

risposta

3

Dopo un sacco di ricerca, sono arrivato ad alcune conclusioni:

primo luogo, esso non richiede tempo per caricare i fotogrammi in tempo reale (mentre l'animazione sta iniziando) al batchNode, e nei casi di grandi immagini (iPad) a volte congela la scena.

Così, in alcuni casi come questo, è necessario caricare le immagini di cache al metodo init per evitare che, perché non hai altro modo, e questo è il motivo per cui abbiamo la cache in ogni caso:

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

e se questa animazione si verifica frequentemente, non è necessario cancellarla dalla cache.

Altre cose deve essere cancellato dalla cache se non usarlo

[[CCTextureCache sharedTextureCache] removeUnusedTextures]; 

sarà chiaro solo dalla cache gli sprite che è stato rimosso dallo schermo già.

la sua non è sufficiente per cancellare solo le cornici:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 

In altri scenari in cui sprites schede tecniche immagini non sono così grandi, è possibile caricarli al batchNode in questo momento l'animazione è partenze, e rimuovere loro alla fine.