我有一个标准的 cocos2d 启动层(HelloWorldLayer)。我为我的地形创建了另一类名为“Terrain”的 CCNode 类型。然后我在层的初始化中将它添加到我的层中:
terrain = [[Terrain alloc] initWithWorld:world AndLevel:0];
[self addChild:terrain z:1];
我添加了一个“CarObject”类(CCSprite 类),并将汽车对象添加到我的地形
car = [[CarObject alloc] initWithWorld:world];
[terrain addChild:car];
- 即在地形和汽车的 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 查看地形位置是否发生变化时,我可以看到位置实际上发生变化,但视图没有变化。我究竟做错了什么?我确定这是一个愚蠢的错误!
顺便说一句,如果我在 HelloWorldLayer 的更新方法中尝试这个(而不是 [terrain setOffsetX..])
self.position = CGPointMake(self.position.x-1, self.position.y);
地形在移动。