2013-12-12 34 views
0

我正在创建一个格斗游戏。我有一张英雄的精灵画面和一张怪物的精灵画面。既然两者都能够进行多次攻击,我想避免将它们合并到一张spritesheet中。我打算创造更多的角色。cocos2d,重新排列不同批次节点中的孩子

现在我为每个spritesheet创建一个SpriteBatchNode,并将它们添加到图层中。

CCLayer* stage = CCLayer::create(); 
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("character_hero.plist"); 
this->characterHeroBatchNode = CCSpriteBatchNode::create("character_hero.pvr.ccz"); 

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("character_monster.plist"); 
this->characterMonsterBatchNode = CCSpriteBatchNode::create("character_monster.pvr.ccz"); 

stage->addChild(characterHeroBatchNode); 
stage->addChild(characterMonsterBatchNode); 

现在我有一个characterHeroBatchNode精灵,多发characterMonsterBatchNode

如何根据他们的PositionY属性重新排序怪物和英雄z顺序。

例如>

monster1->setPositionY(10); // In monster batch node 
hero->setPositionY(24); // In hero batch node 
monster2->setPositionY(43); // In monster batch node 

我想怪物1幕后英雄。和怪物背后的英雄2。

回答

1

过去,我不得不在游戏中创建前景中的某些精灵和后台中的其他人。精灵在不同的床单上,就像你拥有它们一样。

为了让它们按照我想要的顺序排列,我将“前”精灵放入一个CCLayer中,“后退”精灵放入另一个CCLayer中。我按照我希望它们出现的顺序将这些图层添加到场景中。我还操纵了每个相应的图层,以根据需要淡入/淡出。所以你可以在场景中拥有英雄,然后让敌人出现在他身后。

如果你想混合搭配,你可以有3层,一层为“中层”,一层为“前”,一层为“后”,并动态移动层之间的精灵。

这就是您要找的内容?

+0

感谢您的建议。我会牢记在心。我还不确定2 Spritesheets是否足够。但我会以某种方式采纳它。 – Xazen

1

如果我明白你在问什么,答案是,你不能。考虑每个CCSpriteBatchNode是自己的容器。您可以调整CCSpriteBatchNode内部精灵的Z顺序,但是当您将该批次添加到CCLayer时,整个将以您添加的任何Z顺序应用于CCLayer。所以为了做你想做的事情,你需要另一批怪物。或者使用CCSprites并以您想要的方式在CCLayer上添加/调整它们,但显然会失去CCSpriteBatchNode的好处。

+0

既然NonlinearIdeas发布了一个更适合我的案例,我接受了他的回答。但感谢您的快速回复! – Xazen