如何让孩子CCSprite在其父级之上绘制?

Dyl*_*lan 6 drawing cocos2d-iphone ccsprite

我试图控制CCSprites一个接一个地分层的顺序.我会使用zOrder,但是我正在制作由明确的精灵组成的角色(一些精灵在其他精灵addChild身上)和zOrder只在兄弟精灵中受到尊重.

基本上,我想让我的精灵成为父母,以便他们可以继承彼此的变换,但我想确定绘制顺序.

环顾四周,听起来像使用CCSprite的vertexZ属性是要走的路.我试过了.我设置我的自定义CCSprite的draw方法,如下所示:

- (void)draw
{
    glEnable(GL_BLEND);
    CHECK_GL_ERROR_DEBUG();
    glBlendFunc(GL_SRC_ALPHA, GL_ONE);
    CHECK_GL_ERROR_DEBUG();
    [super draw];
    glDisable(GL_BLEND);
}
Run Code Online (Sandbox Code Playgroud)

我的每个精灵现在都有一个0的zOrder和一个独特的vertexZ来按照我的意愿对它们进行分层,但它不起作用:任何有父级的精灵都不会显示!

尝试一些事情,我发现如果我没有设置vertexZ,则会显示所有精灵.如果我保留顶点并且不是父节点,它们都会显示出来.但是设置了vertexZs后,任何子精灵都不会显示.

这里发生了什么,我怎样才能让它发挥作用?

更新: 更多线索.我可以完全围绕我对[super draw]的调用来评论GL函数,结果是一样的.此外,它显示了具有vertexZ do显示的子精灵,但是只要它们与任何其他精灵重叠,它们就会变得不可见.紫色纸精灵是该生物的左前臂精灵(在屏幕右侧)的孩子,但应该在它上面.

无论在上面还是在其他精灵之下,紫色精灵都会咬一口.

对于上图,我基本上是在我的CCLayer中这样做的.我想养育孩子,但我希望手和纸都在上面.

[self addChild:lUpperarm];
[self addChild:lForearm];
[self addChild:face];
[self addChild:rUpperarm];
[self addChild:rForearm];
[lForearm addChild:handAndPaper];

lUpperarm.vertexZ = -100;
lForearm.vertexZ = -99;
face.vertexZ = -98;
rUpperarm.vertexZ = -97;
rForearm.vertexZ = -96;
handAndPaper.vertexZ = -95;
Run Code Online (Sandbox Code Playgroud)

这就是我想要的样子.(我改变了[self addChild:handAndPaper]丢失lForearm转换的最后一行,而不是我想要的.)

紫色纸覆盖其他精灵.

更新2: 有人建议我将zOrder设置为-1的所有子项添加:例如[lForearm addChild:handAndPaper z:-1].这改变了一点,但仍然没有解决它,唉.似乎vertexZ不确定绘制顺序和/或混合是错误的.

zOrder -1的影响.

Gur*_*uru 0

当添加时只有你可以控制z顺序?

[self addChild:lUpperarm z:1];
[self addChild:lForearm z:2];
[self addChild:face z:3];
[self addChild:rUpperarm z:4];
[self addChild:rForearm z:5];
[lForearm addChild:handAndPaper z:6];
Run Code Online (Sandbox Code Playgroud)