我正在尝试在一个图层上放置一系列精灵,但由于我想将所有精灵作为一组移动,我创建了一个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有关。谁知道我在这里做错了什么?
答案 0 :(得分:3)
您想将lightPane
的位置设为0,0
。默认情况下,该位置不居中,它位于左下角。
答案 1 :(得分:0)
请记住,如果你转移到精灵地图集,这将无效。除非您转到新版本的Cocos2d(1.9,处于测试阶段)。 1.9版本将允许您对atlas sprites进行复杂的育儿。