ios - Cocos2d:在运行时为Sprite节点中批处理的CCSprite设置zOrder似乎无效

标签 ios cocos2d-iphone opengl-es-2.0 particle-system

我现在可以在运行时在CCSprite对象上调用这些方法,因为我决定将其批处理在CCSpriteBatchNode中,它似乎不再起作用:

sprt = [CCSprite spriteWithSpriteFrameName:@"sprt.png"];
sprt.anchorPoint = CGPointMake(0.5f, 0.5f);
sprt.position = CGPointMake(40.0f, 60.0f);
[batchNode addChild:sprt z:-1];  // It used to work when I was simply "adding as child" the sprt object, I guess now doesn't set the order anymore because somehow the CCSpriteBatch node doesn't allow the re-ordering of child added to it

CCCallFunc *callback = [CCCallFunc actionWithTarget:self selector:@selector(moveBackwards)];
CCCallFunc *callback2 = [CCCallFunc actionWithTarget:self selector:@selector(moveForward)];

[sprt runAction: [CCRepeatForever actionWithAction: [CCSequence actions:  callback2,  callback ,  nil]]];

-(void) moveBackwards
{
    [sprt setZOrder:-1];
 }

-(void) moveForward
{
    [sprt setZOrder:1];
}

最佳答案

如果您有CCSpriteBatchNode,则必须考虑所有CCSprite都在同一层(spritebatch节点)上。

这意味着,相对于该sprite batch节点中的其他sprite,sprite批处理节点中的sprite可以更改其z顺序,但是您不能更改z顺序以使sprite-batched的sprite出现在另一个节点之前或之后。 Sprite的CCSpriteBatchNode的子级。

我很确定这是您遇到的问题。如果您在解决此问题时遇到麻烦,请考虑CCSpriteBatchNode在z排序方面具有与CCLayer相同的行为(分别是其他任何节点,但开发人员似乎挂在CCLayer上作为唯一/主要的分层结构)。也许这使它更容易理解。

关于ios - Cocos2d:在运行时为Sprite节点中批处理的CCSprite设置zOrder似乎无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14428811/

相关文章:

iphone - cocos2d Sprite 帧缓存无法更改

iphone - 由于从 NSMutableArray 中删除 CCSprite 等元素而导致崩溃

android - 在 OpenGL ES 2.0 或 3.0 中生成深度纹理

ios - 构建操作被禁用 :'project.xcworkspace' 已更改并正在重新加载

ios - 使用 segue 传递 tableviewcell 数据?

iphone - 如何计算触摸点和 UIImageView 中心之间的斜率

android - OpenGL ES 2.0 的漫反射着色器 : Light changes with camera movement (Vuforia on Android)

objective-c - 通过 GCD 的单例模式问题

c++ - 将 Objective C NSRange 转换为 C++ 代码?

android - onDrawFrame 内 glDrawArrays 上的致命信号(GLSurfaceView.Renderer、SurfaceTexture.OnFrameAvailableListener)