1

我能够在运行时在 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];
}
4

2 回答 2

2

以防万一其他人遇到此问题,以下将重新排序精灵...

[self.parent reorderChild:self z:x];

于 2013-05-25T19:48:04.800 回答
2

如果你有一个 CCSpriteBatchNode,你必须考虑所有的 CCSprite 都在同一层(spritebatch 节点)。

这意味着精灵批处理节点中的精灵可以相对于精灵批处理节点中的其他精灵更改它们的 z 顺序,但是您不能更改 z 顺序以使精灵批处理精灵出现在另一个不是的节点的后面或前面精灵的 CCSpriteBatchNode 的子节点。

我很确定这是您遇到的问题。如果您无法理解这一点,请考虑 CCSpriteBatchNode 在 z 排序方面与 CCLayer 具有相同的行为(除了开发人员之外的任何其他节点似乎都挂在 CCLayer 上,作为唯一/主要的分层结构)。也许这样更容易理解。

于 2013-01-21T19:17:37.780 回答