Ho un CCSpriteBatchNode
con una configurazione simile a questo:CCSpriteBatchNode: Child of Child riceve miglioramenti nelle prestazioni di disegno?
CCSpriteBatchNode
ChildA1
ChildB1
ChildB2
....
ChildB999
ChildA2
ChildA3
...
cui tutti i bambini (ChildA1, ChildB1, ChildA2 ...) sono CCSprite
oggetti. Il CCSpriteBatchNode
e tutti i bambini, ma ChildA1
viene creato tramite:
[CCSprite spriteWithSpriteFrameName:@"FileName.png"];
ChildA1
si crea in questo modo:
// Create Parent Sprite
CCSprite* childA1 = [[CCSprite alloc] init];
childA1.contentSize = CGSizeMake(37.5,37.5);
childA1.anchorPoint = ccp(0,0);
[batchNode addChild:childA1 z:0 tag:1];
// Add Child Sprites
[childA1 addChild:childB1 z:0 tag:1];
[childA1 addChild:childB2 z:0 tag:1];
[childA1 addChild:childB3 z:0 tag:1];
// Continue adding childB4-childB999
Nota: Questo rende bene, e vedo l'uscita mi aspetto, dove childB1
's posizione è relativa a childA1
e sposta i risultati childA1
nello spostamento childB1
.
La mia domanda è questa: vedrò un guadagno di prestazioni nel disegno ciascuno di childB1
- childB999
? Da quanto ho capito, lo CCSpriteBatchNode
ottimizza il disegno di tutti i bambini all'interno di uno CCSpriteBatchNode
disegnando insieme tutti i suoi figli CCSprites
. Questo vale anche per i bambini di quelli CCSprites
?
Per coloro che vogliono sapere perché sto facendo questo: Ci sono molti strati all'interno di questo gioco e il raggruppamento CCSprites
all'interno di un CCSprite
all'interno di un CCSpriteBatchNode
mi permette di manipolare un gruppo di CCSprites
manipolando solo il genitore di quel gruppo di sprite.
AFAIK, sì. Se stai usando cocos2.0 o superiore, controlla il numero della figura dei disegni, aggiungi alcuni bambini, non dovrebbe aumentare: cioè il nodo del lotto consuma una singola chiamata per trama aggiunta (diversamente da 'per sprite aggiunto'). Non so se stai facendo ARC, ma se non lo sei stai probabilmente perdendo il childA1 come scritto (che il costruttore non restituisce un oggetto autoreleased). – YvesLeBorg
Sono d'accordo con YvesLeBrog .. Se parli di Texture Memory per Cocos2d, è caricato per immagine o texture. Una volta che una trama viene caricata nella memoria, non ci vuole memoria né tempo per caricarla di nuovo, il che si traduce in un miglioramento delle prestazioni del gioco. Per quanto riguarda la memoria consumata dalle tue variabili, non penso che questo sia il modo ideale in quanto le istanze di CCSprite sono autorelease nella sua stessa classe. Quindi non dobbiamo preoccuparci del loro consumo di memoria. –