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

CCSpriteBatchNodeがある場合は、すべてのCCSpriteが同じレイヤー(spritebatchノード)にあると見なす必要があります。

つまり、スプライトバッチノード内のスプライトは、スプライトバッチノード内の他のスプライトに対してz順序を変更できますが、z順序を変更して、スプライトバッチ処理されたスプライトを、そうでない別のノードの後ろまたは前に表示することはできません。スプライトのCCSpriteBatchNodeの子。

これがあなたが遭遇した問題だと私はかなり確信しています。これを理解するのに問題がある場合は、CCSpriteBatchNodeがzの順序付けに関してCCLayerと同じ動作をしていることを考慮してください(他のノードはそれぞれ、開発者は唯一の/メインのレイヤー構造としてCCLayerにハングアップしているようです)。多分それは理解しやすくなります。

于 2013-01-21T19:17:37.780 に答える