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

时间:2009-12-12 05:50:52

标签: 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;
}

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

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

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

这显然与我作为精灵的父级使用的CocosNode有关。谁知道我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

您想将lightPane的位置设为0,0。默认情况下,该位置不居中,它位于左下角。

答案 1 :(得分:0)

请记住,如果你转移到精灵地图集,这将无效。除非您转到新版本的Cocos2d(1.9,处于测试阶段)。 1.9版本将允许您对atlas sprites进行复杂的育儿。