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 - ???
それらが負の場合、最後に追加されたものが常に前にあるようです。
これに対処するために物事を書き直すことは可能ですが、なぜこれが起こっているのか、何か誤解しているのではないかと非常に興味があります.
あなたが私に与えることができる洞察をありがとう。