Cocos2d Листы спрайтов: как определить, к какому SpriteBatchNode следует добавить спрайты

Я пытаюсь выяснить, как работают листы спрайтов. Я нашел в учебнике этот код:

CCSpriteBatchNode *backgroundBgNode;
 backgroundBgNode = [CCSpriteBatchNode batchNodeWithFile:@"background.pvr.ccz"];
 [self addChild:backgroundBgNode];
 [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"background.plist"];
 CCSprite *background = [CCSprite spriteWithSpriteFrameName:@"MuleDeer-ipadhd.png"];
 background.anchorPoint = ccp(0,0);
 [backgroundBgNode addChild:background];

В основном этот код ясен, но предположим, что у меня есть несколько спрайтов (файлы pvr.czz), и каждый спрайт содержит сотни различных спрайтов. Как было предложено предыдущим кодом, я должен добавить в качестве ребенка каждый спрайт в свой соответствующий CCSpriteBatchNode. В основном проблема заключается в том, что инструмент, который я использую для создания спрайтов, будет почти случайным образом соответствовать спрайтам в разных спрайтах, если все спрайты не вписываются в 1 спрайт. У меня есть список всех файлов (спрайтов), и я точно не знаю, к какому классу spriteSheet они принадлежат. Итак, есть ли способ получить от кода правильный CCSpriteBatchNode, которому я должен добавить свои генерирующие спрайты?

1 ответ

Правило для использования пакетных узлов - вы можете создавать спрайты для одного ТОЛЬКО с использованием текстуры, с которой был инициализирован пакетный узел. Как вы говорите, вы, например, должны работать нормально, но если я правильно вас понимаю, вам интересно, что происходит при работе с другими листами спрайтов? В этом случае вы просто дублируете то, что вы уже сделали.

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"myTexture1.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"myTexture2.plist"];

CCSpriteBatchNode *b = [CCSpriteBatchNode batchNodeWithFile:@"myTexture1.pvr.ccz"];
CCSpriteBatchNode *b1 = [CCSpriteBatchNode batchNodeWithFile:@"myTexture2.png"];

[self addChild:b];
[self addChild:b1]; 

CCSprite *s = [CCSprite spriteWithSpriteFrameName:@"happySprite1.png"];
[b addChild:s];
CCSprite *s1 = [CCSprite spriteWithSpriteFrameName:@"happySprite2.png"];
[b addChild:s1];

CCSprite *s2 = [CCSprite spriteWithSpriteFrameName:@"slowSprite1.png"];
[b1 addChild:s2];
CCSprite *s3 = [CCSprite spriteWithSpriteFrameName:@"slowSprite2.png"];
[b1 addChild:s3];

Этот код лучше подходит для некоторых функций, но, надеюсь, вы получите эту идею? Дайте мне знать, если все еще неясно.

licensed under cc by-sa 3.0 with attribution.