0

我在 cocos2d 中有一个 CCLayer,我正在尝试放置一个 CCSprite 来填充背景。在我的场景中有这个 CCLayer 的两个实例,其中一个,背景显示在正确的位置,有一点偏移,但另一个我无法让图层显示。我有一种感觉,这归结为没有使用 self/self.parent/self.parent.parent 和 convertTo/Node/World/AR/Space 的正确组合。

这是我的代码,适用于该层的一个实例:

CGPoint offsetPos = [self convertToWorldSpace:self.position];
if(UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)){
    bgSprite.position = ccp(offsetPos.x+60, offsetPos.y);
} else {
    bgSprite.position = ccp(offsetPos.x-65, offsetPos.y);
}

为了尝试查看另一层的绊脚石(由isThumbnail属性确定,我添加了一些日志记录:

if(self.isThumbnail){
        NSLog(@"--: %.0f,%.0f", self.bgSprite.position.x, self.bgSprite.position.x);
        NSLog(@"A: %.0f,%.0f", [self.parent convertToWorldSpace:self.bgSprite.position].x, [self.parent convertToWorldSpace:self.bgSprite.position].y);
        NSLog(@"B: %.0f,%.0f", [self convertToWorldSpace:self.bgSprite.position].x, [self convertToWorldSpace:self.bgSprite.position].y);
        NSLog(@"C: %.0f,%.0f", [self.parent convertToNodeSpace:self.bgSprite.position].x, [self.parent convertToNodeSpace:self.bgSprite.position].y);
        NSLog(@"D: %.0f,%.0f", [self convertToNodeSpace:self.bgSprite.position].x, [self convertToNodeSpace:self.bgSprite.position].y);
        NSLog(@"E: %.0f,%.0f", [self.parent convertToWorldSpaceAR:self.bgSprite.position].x, [self.parent convertToWorldSpaceAR:self.bgSprite.position].y);
        NSLog(@"F: %.0f,%.0f", [self convertToWorldSpaceAR:self.bgSprite.position].x, [self convertToWorldSpaceAR:self.bgSprite.position].y);

        NSLog(@"--: %.0f,%.0f", self.position.x, self.position.x);
        NSLog(@"G: %.0f,%.0f", [self.parent convertToWorldSpace:self.position].x, [self.parent convertToWorldSpace:self.position].y);
        NSLog(@"H: %.0f,%.0f", [self convertToWorldSpace:self.position].x, [self convertToWorldSpace:self.position].y);
        NSLog(@"I: %.0f,%.0f", [self.parent convertToNodeSpace:self.position].x, [self.parent convertToNodeSpace:self.position].y);
        NSLog(@"J: %.0f,%.0f", [self convertToNodeSpace:self.position].x, [self convertToNodeSpace:self.position].y);
        NSLog(@"K: %.0f,%.0f", [self.parent convertToWorldSpaceAR:self.position].x, [self.parent convertToWorldSpaceAR:self.position].y);
        NSLog(@"L: %.0f,%.0f", [self convertToWorldSpaceAR:self.position].x, [self convertToWorldSpaceAR:self.position].y);

        NSLog(@"--: %.0f,%.0f", self.bgSprite.position.x, self.bgSprite.position.x);
        NSLog(@"M: %.0f,%.0f", [self.parent.parent convertToWorldSpace:self.bgSprite.position].x, [self.parent.parent convertToWorldSpace:self.bgSprite.position].y);
        NSLog(@"N: %.0f,%.0f", [self.parent.parent convertToNodeSpace:self.bgSprite.position].x, [self.parent.parent convertToNodeSpace:self.bgSprite.position].y);
        NSLog(@"O: %.0f,%.0f", [self.parent.parent convertToWorldSpaceAR:self.bgSprite.position].x, [self.parent.parent convertToWorldSpaceAR:self.bgSprite.position].y);

导致:

ReadMeAStory[3853:c07] --: -55,-55
ReadMeAStory[3853:c07] A: -55,587
ReadMeAStory[3853:c07] B: -45,1074
ReadMeAStory[3853:c07] C: -55,487
ReadMeAStory[3853:c07] D: -65,0
ReadMeAStory[3853:c07] E: -55,587
ReadMeAStory[3853:c07] F: -45,1074
ReadMeAStory[3853:c07] --: 10,10
ReadMeAStory[3853:c07] G: 10,537
ReadMeAStory[3853:c07] H: 20,1024
ReadMeAStory[3853:c07] I: 10,437
ReadMeAStory[3853:c07] J: 0,-50
ReadMeAStory[3853:c07] K: 10,537
ReadMeAStory[3853:c07] L: 20,1024
ReadMeAStory[3853:c07] --: -55,-55
ReadMeAStory[3853:c07] M: -55,537
ReadMeAStory[3853:c07] N: -55,537
ReadMeAStory[3853:c07] O: 309,954

有人可以解释在这种情况下需要哪一个,也许怎么知道?

编辑:背景精灵被添加到层次结构中:

    UIImage *bgImage = [Utils backgroundWithName:currentScene.background];
    bgSprite = [CCSprite spriteWithCGImage:bgImage.CGImage key:currentScene.background];
    bgSprite.contentSize = self.contentSize;
    [self updateBackground];
    [self addChild:bgSprite z:0];

层次结构看起来像这样(括号显示添加元素的顺序)

-Scene
--Main layer (1) - background in correct position
--Other layers container (2)
---Other layer A (3)
----Background sprite (7)
---Other layer B (4)
----Background sprite (8)
---Other layer C (5)
----Background sprite (9)
---Other layer D (6)
----Background sprite (10)
4

0 回答 0