0

我正在制作一个自上而下的射击游戏,它广泛使用使用“平铺”应用程序创建的 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 来实现相同的目的,但似乎必须有更好的方法。

4

1 回答 1

1

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

于 2011-09-13T03:25:31.270 回答