经过几次头痛后,我发现CCSpriteBatchNode
与 cocos2d olny 一起使用允许将 z 顺序精灵作为孩子添加到其中(这很明显,现在我明白了..)
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"token_default.plist"];
CCSpriteBatchNode *tokenSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"token_default.png"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"objects_default.plist"];
CCSpriteBatchNode *objectsSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"objects_default.png"];
CCSprite *token = [[[CCSprite alloc] initWithSpriteFrameName:@"token_SE.png"] autorelease];
[token setPosition:tokenSpawnPoint];
CCSprite *enemy = [[[CCSprite alloc] initWithSpriteFrameName:@"token_blak_SE.png"] autorelease];
[enemy setPosition:enemySpawnPoint];
CCSprite *houseA = [[[CCSprite alloc] initWithSpriteFrameName:@"house_small.png"] autorelease];
[houseA setPosition:[self randomHousePosition]];
CCSprite *houseB = [[[CCSprite alloc] initWithSpriteFrameName:@"house_big.png"] autorelease];
[houseB setPosition:[self randomHousePosition]];
[tokenSpriteSheet addChild:token];
[tokenSpriteSheet addChild:enemy];
[objectsSpriteSheet addChild:houseA];
[objectsSpriteSheet addChild:houseB];
并且因为我必须将它们添加到显示列表中,如下所示..
[_isoMap addChild:objectsSpriteSheet];
[_isoMap addChild:tokenSpriteSheet];
我无法更改其他房屋之间单个令牌的 z 顺序...
它们将始终呈现在房屋上,直到我更改这些批处理节点的顺序
顺便说一句,我可以在一个大的单个批处理节点中“合并”所有精灵的艺术......这样做可以使用精灵的坐标来订购精灵
[fullSpriteSheet reorderChild:token z:token.position.y];
我有点坚持......有没有办法实现这一点,有不同的精灵 bacth 节点?或者可以以编程方式合并两个batchnodes?(或类似的东西)
我发现了KnightFight,LozArcher 在 github 上的一个非常有趣的开放项目。他使用CCSpriteFrame
andCCSprite
的setDisplayFrame
方法,而不是批处理节点...但我无法运行它,因为它似乎是 cocos2d 的旧版本(显然不工作使用 xcode 4)