Cocos2d图层层次结构和绘制顺序

时间:2011-08-30 15:32:04

标签: cocos2d-iphone

我对cocos2d中的层次结构问题感到困惑。

我的身体部位有一个精灵的角色。身体的父精灵是躯干。然后我有手臂和头部是它的孩子,然后肘部和手是手臂的孩子。到目前为止,它的效果非常好:我转动肘部,手也随之转动,就像真正的木偶一样。

问题在于,当我想要让它挥动时,双手会因为头部具有比手臂(手的父母)更高的z顺序而落后于头部。

所以,我作为躯干的孩子添加另一只手,并将其不透明度打开关闭,这取决于我是否需要在头部上方或后方的手。然而,另一只手不是手臂的孩子,它是躯干的孩子,并且只要手臂旋转就不会旋转。所以,我需要每帧手动定位它。

所以我的问题是:是否有可能让一个节点的精灵继承其翻译,但是将其绘制在另一个指定的精灵之上? (就像其父母的另一个兄弟姐妹一样)

改变武器和头部的z顺序是不可能的,因为动画是从另一个不支持这些参数的程序导出的。

谢谢!

4 个答案:

答案 0 :(得分:2)

如何从其他程序导出“动画”?我相信这就是问题所在。如果我这样做,我会使用Z层。更好的是,看看Sprite Atlases来创建你的动画。

我认为你制作动画的方式太多了。使用Atlas,您可以为图形创建动画,将其举起并挥动它们。然后只需在sprite atlas上调用动画。

答案 1 :(得分:1)

我通过在模型中添加一个额外的隐形躯干精灵来解决我的应用程序中的.same问题。在这种情况下,你可以将一只手臂和头部绑在隐形躯干上,另一只绑在第二躯干上

答案 2 :(得分:0)

我想我找到了解决问题的方法。它是节点的vertexZ属性。

/** The real openGL Z vertex.
 Differences between openGL Z vertex and cocos2d Z order:
   - OpenGL Z modifies the Z vertex, and not the Z order in the relation between parent-children
   - OpenGL Z might require to set 2D projection
   - cocos2d Z order works OK if all the nodes uses the same openGL Z vertex. eg: vertexZ = 0
 @warning: Use it at your own risk since it might break the cocos2d parent-children z order
 @since v0.8
 */

@property (nonatomic,readwrite) float vertexZ;


This article describes how to use it

答案 3 :(得分:0)

还要确保在启用深度的情况下启动EAGLView

EAGLView *glView = [EAGLView viewWithFrame: [window bounds]
                               pixelFormat: kEAGLColorFormatRGBA8
                               depthFormat: GL_DEPTH_COMPONENT16_OES];