我可以在两个CCTMXLayers之间分层CCSprite吗?

时间:2011-09-13 02:32:05

标签: cocos2d-iphone ccsprite tmx

我正在制作一个自上而下的射击游戏,广泛使用通过“Tiled”应用程序创建的TMX地图。在我的TMX地图中,我有一个带有地砖的“背景”图层,它出现在我的角色下面(CCSprites。)

我在TMX文件中有另一个名为“Foreground”的图层,我希望它出现在我的CCSprites“上方”,让人觉得它们在各种物体下面行走。

我尝试使用CCNode类的vertexZ属性来执行此操作:

CCTMXLayer *backgroundLayer = ...
CCSprite *spriteNode = ...
CCTMXLayer *foregroundLayer = ...

[backgroundLayer setVertexZ:1];
[spriteNode setVertexZ:2];
[foregroundLayer setVertexZ:3];

...但事实证明,vertexZ实际上改变了openGL视图中节点的 visual 外观。当它具有更高的vertexZ值时,它有效地使CCNode显得更大,或更接近用户。我不希望这样 - 我想要的只是一种不可思议的薄蛋糕效果层,层之间没有任何视觉差异。

所以我想我会尝试更改节点的zOrder属性,如下所示:

[[backgroundLayer parent] reOrderChild:backgroundLayer z:1];
[[spriteNode parent] reOrderChild:backgroundLayer z:2];
[[foregroundLayer parent] reOrderChild:backgroundLayer z:3];

但是我意识到我在这里做的是一个根本问题,因为我的spriteNode是CCScene的直接子节点,但是后台节点和前景节点都是我的CCTMXTiledMap的子节点,本身是CCScene的孩子。

所以我基本上试图在地图的两个层之间放置一个CCSprite,从 CCScene的角度来看,它实际上只是同一层的两个部分。

似乎我可以创建一个CCTMXTiledMap的附加实例来保存前景层,但这看起来也有点矫枉过正。我的另一个想法是创建CCSprites以达到同样的目的,但似乎必须有更好的方法。

1 个答案:

答案 0 :(得分:1)

是的,我曾经非常轻易地使用过Tiled,我相信可以选择在TMXTiledMap中添加一个对象层(Tiled - > Layer - > Add Object Layer ...),然后一旦导入到你的构建可以将CCSprite与您创建的相应对象层链接起来。我会在cocos2d论坛上发布你的问题,因为那里的人更有经验,并有能力用例子回答这个问题。