我正在制作一个自上而下的射击游戏,它广泛使用使用“平铺”应用程序创建的 TMX 地图。在我的 TMX 地图中,我有一个带有地砖的“背景”图层,它出现在我的角色下方(CCSprites。)
我在 TMX 文件中有另一层称为“前景”,我希望它出现在我的 CCSprites 的“上方”,给人一种它们在各种物体下方行走的错觉。
我尝试使用 CCNode 类的 vertexZ 属性来执行此操作:
CCTMXLayer *backgroundLayer = ...
CCSprite *spriteNode = ...
CCTMXLayer *foregroundLayer = ...
[backgroundLayer setVertexZ:1];
[spriteNode setVertexZ:2];
[foregroundLayer setVertexZ:3];
...但事实证明 vertexZ 实际上改变了节点在 openGL 视图中的视觉外观。当 CCNode 具有较高的 vertexZ 值时,它有效地使 CCNode 看起来更大或更靠近用户。我不想要那个——我想要的只是一种不可能的薄蛋糕层的效果,层之间没有任何视觉差异。
所以我想我会尝试改变节点的 zOrder 属性,如下所示:
[[backgroundLayer parent] reOrderChild:backgroundLayer z:1];
[[spriteNode parent] reOrderChild:backgroundLayer z:2];
[[foregroundLayer parent] reOrderChild:backgroundLayer z:3];
但是我意识到我在这里所做的事情存在一个根本问题,因为我的 spriteNode 是 CCScene 的直接子节点,但背景和前景节点都是我的 CCTMXTiledMap 的子节点,而 CCTMXTiledMap本身就是 CCScene 的子节点。
所以我基本上是想在地图的两层之间插入一个 CCSprite,从CCScene 的角度来看,这实际上只是同一层的两个部分。
看来我可以创建一个额外的 CCTMXTiledMap 实例来保存前景层,但这似乎也有点矫枉过正。我的另一个想法是创建 CCSprite 来实现相同的目的,但似乎必须有更好的方法。