【问题标题】:Cocos2d - multiple sprites on parent node not layerCocos2d - 父节点上的多个精灵而不是层
【发布时间】:2009-12-12 05:50:52
【问题描述】:

我试图在一个图层上放置一系列精灵,但由于我想将所有精灵作为一个组移动,我创建了一个 CocosNode,将其设置为与屏幕相同的大小并将其放置在屏幕中心,然后将 Sprites 添加到该节点 (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 有关。有人看到我在这里做错了吗?

【问题讨论】:

  • 格式良好的问题和良好的代码示例! +1

标签: iphone cocos2d-iphone


【解决方案1】:

您想将lightPane 的位置设置为0,0。位置默认不居中,在左下角。

【讨论】:

  • 噢!出于某种原因,我希望 CocosNode 表现得像一个 Sprite - 我相信它的锚点设置在中心?无论哪种方式,你都是对的,它确实需要位于 0,0 而不是中心。谢谢!
  • 或者 - 我将 lightPane 节点设置为锚定在 0.5,0.5。我可以发誓我早些时候尝试过,但没有奏效。但是,我认为我所做的是将锚点设置为 240,160 而不是 0.5,.5 - 结果锚点与内容的大小成正比,而不是绝对点,因此 0.5,.5 表示高度的一半宽度的一半。
  • 我认为精灵有一个居中的锚点位置,所以动作的行为符合预期。例如想象一下旋转一个精灵并让它从左下角旋转。
【解决方案2】:

请记住,如果您移动到精灵图集,这将不起作用。除非您迁移到 Cocos2d 的新版本(1.9,它处于测试阶段),否则不会。 1.9 版本将允许您对 atlas sprites 进行复杂的育儿。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多