0

cocos2d で z オーダーがどのように機能するかは理解できたと思いますが、説明できない問題が発生しています。

以下のコードで作成された CCSpriteBatchNode の子として、いくつかの CCSprite があります。これらの各スプライトには、複数の子 CCSprite があります。addChild に渡す z 値が正である限り、すべて正常に機能します。それらが負の場合、期待どおりに機能しなくなり、なぜそうなるのかについての情報が見つかりません. cocos2d バージョン 1.0.1 を使用しています。

    CCSprite *pikaSprite = [CCSprite spriteWithSpriteFrameName:@"PikaLarge.png"];
    [pikaSprite setAnchorPoint:ccp(0.0f, 0.5f)];
    [pikaSprite setPosition:ccp(pikaX, pikaBox.boundingBox.size.height * 0.6f)];            
    [pikaBatchNode addChild:pikaSprite z:0];

    CCSprite *sprite1 = [CCSprite spriteWithSpriteFrameName:@"Sprite1.png"];
    [sprite1 setPosition:ccp(pikaSprite.boundingBox.size.width * 0.7f, pikaSprite.boundingBox.size.height * 0.9f)];
    [pikaSprite addChild:sprite1 z:-1];

    CCSprite *sprite2 = [CCSprite spriteWithSpriteFrameName:@"Sprite2.png"];
    [sprite2 setPosition:ccp(pikaSprite.boundingBox.size.width * 0.8f, pikaSprite.boundingBox.size.height * 0.9f)];

    [pikaSprite addChild:sprite2 z:-10];

sprite2 は sprite1 の前に表示されますが、pikaSprite の後ろに表示されます。私が理解しているように、それらは兄弟であり、スプライト2のz値が低いため、スプライト1の後ろにあるはずです。

sprite2 を sprite1 の後ろに、両方とも pikaSprite の後ろに配置したいのですが、追加する順序を変更しない限り取得できません。これは可能ですが、やや困難です。

4 つの異なる順序付けを試しましたが、機能しないのはこれだけです。

1.

    [pikaSprite addChild:sprite1 z:1];
    ...
    [pikaSprite addChild:sprite2 z:10];  // sprite2 is in front, correct

2.

    [pikaSprite addChild:sprite1 z:10];  // sprite1 is in front, correct
    ...
    [pikaSprite addChild:sprite2 z:1];  

3.

    [pikaSprite addChild:sprite1 z:-10];
    ...
    [pikaSprite addChild:sprite2 z:-1];  // sprite2 is in front, correct

4.

    [pikaSprite addChild:sprite1 z:-1];
    ...
    [pikaSprite addChild:sprite2 z:-10];  // sprite2 is in front - ???

それらが負の場合、最後に追加されたものが常に前にあるようです。

これに対処するために物事を書き直すことは可能ですが、なぜこれが起こっているのか、何か誤解しているのではないかと非常に興味があります.

あなたが私に与えることができる洞察をありがとう。

4

0 に答える 0