Cocos2d - 父节点上没有图层的多个精灵

Jor*_*gel 5 iphone cocos2d-iphone

我试图在一个图层上放置一系列精灵,但由于我想将所有精灵作为一组移动,我创建了一个CocosNode,将其设置为与屏幕相同的大小并将其放置在屏幕的中心.屏幕,然后将Sprite添加到该节点(lightNode),而不是将它们添加到图层.

我所看到的是,与将它们放在图层而不是在lightNode中相比,精灵不会出现在正确的(相同的?)位置.

我使用XCode Cocos2d应用程序模板"Hello World"制作了一个测试程序来显示问题 - 然后我用这段代码替换了HelloWorldScene.m中HelloWorld类的-init()方法.

-(id) init
{
    if( (self=[super init] )) 
    {
        // create my parent node that will contain all the related sprites
        lightPane = [[CocosNode alloc] init];
        CGSize paneSize = { 480, 320 };
        [lightPane setContentSize:paneSize]; 
        [lightPane setPosition:ccp(240, 160)];

        // add pane to layer     
        [self addChild:lightPane z:0];

        // add a series of sprites to demonstrate the problem 
        int y = 40;
        int x;
        for (x=30; x<300; x+=20)
        {
            Sprite *sp = [Sprite spriteWithFile:@"pause.png"];
            [sp setPosition:ccp(x, y)];

            NSLog(@"Next sprite at position (%d, %d)", x, y);

            [lightPane addChild:sp z:1];
            //[self addChild:sp z:1]; 
            x+= 20;
        }
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

此代码引用名为"pause.png"的PNG文件 - 只需拍摄大小约为30x30像素的小图像,并将其放入此项目中即可运行它.

您将看到的是精灵出现在屏幕的一半左右,从中间开始向右侧移动.

如果你注释掉将精灵添加到lightPane的行,并取消注释它下面的行,并重新运行样本,你会看到精灵(正确)出现在它们应该的坐标上.

这显然与我作为精灵的父级使用的CocosNode有关.有谁看到我在做错了什么?

Col*_*son 3

您想要将 的位置设置 lightPane0,0。默认情况下位置不是居中的,而是左下角。