Cocos2d Sprite表:如何确定应该添加Sprite的SpriteBatchNode

时间:2013-11-05 20:06:39

标签: cocos2d-iphone

我正在试图找出Sprite表的工作原理。我在教程中找到了这段代码:

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];

基本上这段代码很清楚,但假设我有多个spritesheets(pvr.czz文件),并且每个spritesheet都有数百个不同的精灵。正如前面的代码所建议的那样,我应该将每个sprite作为一个子元素添加到他对应的CCSpriteBatchNode中。基本上问题是,如果所有精灵都不适合1个spritesheet,我用来生成spritesheets的工具几乎会随机地将sprite放入不同的spritesheets中。我所拥有的是所有文件(精灵)的列表,我不确切知道它们属于哪个spriteSheet。那么有没有办法从代码中获取正确的CCSpriteBatchNode,我应该添加我的生成精灵?

1 个答案:

答案 0 :(得分:0)

使用批处理节点的规则是,您只能使用批处理节点初始化的纹理为一个节点创建精灵。如你所说,你的例子应该可以正常工作但是如果我理解你正确的话你会想知道在使用更多的精灵表时会发生什么?在这种情况下,您只需复制已完成的内容。

[[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];

这段代码更适合某些功能,但希望你能得到这个想法?如果还不清楚,请告诉我。