Mam CCSpriteBatchNode
w konfiguracji jak poniżej:CCSpriteBatchNode: Czy dziecko dziecka otrzymuje przyrost wydajności rysunku?
CCSpriteBatchNode
ChildA1
ChildB1
ChildB2
....
ChildB999
ChildA2
ChildA3
...
Jeżeli wszystkie dzieci (ChildA1, ChildB1, ChildA2 ...) są CCSprite
obiekty. CCSpriteBatchNode
i wszystkie dzieci, ale ChildA1
tworzony jest poprzez:
[CCSprite spriteWithSpriteFrameName:@"FileName.png"];
ChildA1
jest tworzony tak:
// 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
Uwaga: To czyni dobrze i widzę wyjście spodziewam, gdzie childB1
„s pozycja jest określana jako childA1
, a przenoszenie childA1
powoduje przesunięcie childB1
.
Moje pytanie brzmi następująco: Czy widzę wzrost wydajności na rysunku każdego z childB1
- childB999
? Z tego co rozumiem, CCSpriteBatchNode
optymalizuje rysunek wszystkich dzieci w ramach CCSpriteBatchNode
, rysując razem całe swoje dziecko CCSprites
. Czy odnosi się to również do dzieci tych CCSprites
?
Dla tych, którzy chcą wiedzieć, dlaczego to robię: Istnieje wiele warstw w tej grze i grupowanie CCSprites
wewnątrz CCSprite
w CCSpriteBatchNode
pozwala mi manipulować grupę CCSprites
manipulując tylko rodzica, który grupa duszków.
AFAIK, tak. Jeśli używasz cocos2.0 lub wyższej, sprawdź liczbę losowań, dodaj trochę dzieci, nie powinno to wzrosnąć: np. Węzeł wsadowy zużywa jedno losowanie na każdą dodaną teksturę (w przeciwieństwie do "dodania sprite'a"). Nie wiem, czy jesteś ARC'ing, ale jeśli nie jesteś prawdopodobnie wyciekasz childA1 jak napisano (konstruktor nie zwraca autoreleased obiektu). – YvesLeBorg
Zgadzam się z YvesLeBrog .. Jeśli mówisz o pamięci tekstury dla Cocos2d, jest ona załadowana na obraz lub teksturę. Gdy tekstura zostanie załadowana do pamięci, ani jej pamięć, ani czas nie wymagają ponownego załadowania, co powoduje poprawę wydajności gry. Odnośnie do pamięci zużywanej przez zmienne, nie sądzę, aby było to idealne rozwiązanie, ponieważ instancje CCSprite są autorelease w samej klasie. Nie musimy więc martwić się o zużycie pamięci. –