0

標準の 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 の update メソッドでこれを試してみると ([terrain setOffsetX..] の代わりに)

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

地形が動いています。

4

1 に答える 1

0

Car は Terrain の子です。したがって、車の位置は地形の位置に相対的です。地形の位置は、実際には地形の位置に相対的な車の位置に基づいているため、位置の更新が互いに打ち消し合うという効果に単純に遭遇する可能性があります。

Car を中央に置いたまま Terrain を移動したい場合は、Car を Terrain の子として追加しないでください。代わりに、Terrain (HelloWorldLayer) と同じノードに追加します。次に、車と地形を互いに独立して移動できます。

于 2012-08-03T12:53:58.137 に答える