我有一个标准的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);
地形正在移动。
答案 0 :(得分:0)
如果您想在保持汽车居中的同时移动地形,则不应将汽车添加为地形的孩子。而是将其添加到与Terrain(HelloWorldLayer)相同的节点。然后你可以相互独立地移动汽车和地形。