gpt4 book ai didi

cocos2d-iphone - 我怎样才能让一个 child CCSprite在其父对象上绘制?

转载 作者:行者123 更新时间:2023-12-04 16:14:43 25 4
gpt4 key购买 nike

我试图控制CCSprites一层一层堆叠的顺序。我将使用zOrder,但我要对由关节 Sprite (某些 Sprite 以addChild代入其他 Sprite )组成的角色进行动画处理,并且zOrder仅在同级 Sprite 中受人尊敬。

基本上,我想让我的子画面成为父级,以便它们可以继承彼此的变换,但是我想确定绘制顺序。

Looking around,这听起来像是使用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);
}

现在,我的每个子画面的zOrder都为0,并且有一个唯一的vertexZ可以按照我的意愿对其进行分层,但是它不起作用:任何具有父项的子画面都不会显示!

尝试一些事情,我发现如果不设置vertexZ,则会显示所有 Sprite 。而且,如果我保留vertexZ并且不作 parent ,那么它们都将显示出来。但是设置了vertexZs后,将不会显示任何子 Sprite 。

这是怎么回事,如何使它正常工作?

更新:更多线索。我可以在调用[super draw]时完全注释掉GL函数,结果是相同的。同样,它可以显示具有vertexZ的子子画面,但是无论它们与其他任何子画面重叠的位置如何,它们都将变得不可见。紫色纸 Sprite 是该生物的左前臂 Sprite 的子代(在屏幕右侧),但应该位于其上方。

对于上面的图片,我基本上是在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;

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

更新2:有些建议我将zOrder设置为-1的所有子代添加:例如 [lForearm addChild:handAndPaper z:-1]。有点改变了,但还是没有解决。似乎是vertexZ无法确定绘制顺序和/或混合错误。

最佳答案

用Cocos2d编写RPG时,我dealt with this issue。问题是Alpha混合。如您所见,即使透明,纸张仍被左手 Sprite 覆盖。由于某些原因,当使用Cocos2d的vertexZ技术时,有时会出现此问题。要解决此问题,您可以尝试更改Alpha混合级别。尝试0.0、0.5和1.0:

-(void) draw
{
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.0f);
[super draw];
glDisable(GL_ALPHA_TEST);
}

如果那不起作用,那么我建议一个完整的解决方法。将所有子画面保留在同一父节点中,并使用常规的z顺序。这不是理想的解决方案,但是如果您使用“元”父节点,那么仍然可以轻松转换所有子节点。

关于cocos2d-iphone - 我怎样才能让一个 child CCSprite在其父对象上绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com