Cocos2d:CCSpriteBatchNode孙子z-order以错误的顺序显示

时间:2013-04-30 22:05:31

标签: ios cocos2d-iphone

我以为我理解了z命令在cocos2d中是如何工作的,但是我遇到了一个我无法解释的问题。

我有许多CCSprites作为CCSpriteBatchNode的子代,使用下面的代码创建。这些精灵中的每一个都有几个孩子CCSprites。只要我传递给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 - ???

如果它们是否定的,那么最后添加的内容似乎总是在前面。

有可能重写一些事情来解决这个问题,但我很好奇为什么会这样,并且想知道我是否会误解某些事情。

感谢您给我的任何见解。

0 个答案:

没有答案