无法抵消ccnode让我以我的主角为中心

时间:2012-08-03 09:38:01

标签: iphone cocos2d-iphone

我有一个标准的cocos2d启动层(HelloWorldLayer)。我为我的地形创建了另一个名为“Terrain”的CCNode类。然后我将它添加到图层的init中的我的图层:

terrain = [[Terrain alloc] initWithWorld:world AndLevel:0];
[self addChild:terrain z:1];

我添加一个'CarObject'类(一个CCSprite类),并将一个car对象添加到我的地形

 car = [[CarObject alloc] initWithWorld:world];
[terrain addChild:car];

-i.e。在地形和汽车的initWithWorld中,我初始化了一些Box2d代码

当我移动它时,我尝试将我的汽车对象置于我的屏幕中,我在我的更新方法中执行此操作:

  float offsetX = car.position.x;
   float offsetY = car.position.y;
    [terrain setOffsetX:(int)offsetX andOffsetY:(int)offsetY];   

其中setOffsetX ..方法是:

- (void) setOffsetX:(int)newOffsetX andOffsetY:(int)newOffsetY {

    _offsetX = newOffsetX;
    _offsetY = newOffsetY;

    CGSize winSize = [CCDirector sharedDirector].winSize;

    self.position = CGPointMake(-(_offsetX - winSize.width/2), -(_offsetY - winSize.height/2));

}

当我使用NSLog查看地形位置是否发生变化时,我可以看到该位置实际上是chages,但视图却没有。我究竟做错了什么?我确定这是一个愚蠢的错误!

不过,如果我在HelloWorldLayer的更新方法中尝试这个(而不是[terrain setOffsetX ..])

self.position = CGPointMake(self.position.x-1, self.position.y);

地形正在移动。

1 个答案:

答案 0 :(得分:0)

汽车是地形的孩子。因此,汽车的位置与Terrain的位置有关。由于你将Terrain的位置基于Car的位置,这实际上与Terrain的位置有关,你可能只是遇到了你的位置更新只是相互抵消的效果。

如果您想在保持汽车居中的同时移动地形,则不应将汽车添加为地形的孩子。而是将其添加到与Terrain(HelloWorldLayer)相同的节点。然后你可以相互独立地移动汽车和地形。