我现在可以在运行时在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上作为唯一/主要的分层结构)。也许这使它更容易理解。

10-06 08:18