我以为我理解了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 - ???
如果它们是否定的,那么最后添加的内容似乎总是在前面。
有可能重写一些事情来解决这个问题,但我很好奇为什么会这样,并且想知道我是否会误解某些事情。
感谢您给我的任何见解。