0

我以为我了解 z order 在 cocos2d 中的工作原理,但我遇到了一个我无法解释的问题。

我有许多 CCSprites 作为 CCSpriteBatchNode 的子节点,使用下面的代码创建。这些精灵中的每一个都有几个子 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 后面。据我了解,它应该在 sprite1 之后,因为它们是兄弟姐妹,而 sprite2 的 z 值较低。

我希望 sprite2 在 sprite1 之后,都在 pikaSprite 之后,除非我更改添加它们的顺序,否则我无法获得,这是可能的,但有点困难。

我尝试了四种不同的顺序,这是唯一一个不起作用的顺序。

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