2012-05-11 11 views
0

私はCCSpriteを持っています(その中に私はb2bodyを持っています)。スコープは、本体と一緒に移動して後方に移動するスプライトを作成することです。別の位置に描かれたボディ

が、私はこのようにb2bodyを作成します。

if (_body) 
    { 
     _world->DestroyBody(_body); 
    } 


    b2BodyDef bd; 
    bd.type = b2_kinematicBody; 


    _body = _world->CreateBody(&bd); 

    b2PolygonShape shape; 

    b2Vec2 _p1, _p2 , _p1sub,_p2sub; 

    _p1 = b2Vec2(point1.x/PTM_RATIO,point1.y/PTM_RATIO); 
    _p2 = b2Vec2(point2.x/PTM_RATIO,point2.y/PTM_RATIO); 


    shape.SetAsEdge(_p1, _p2); 
    _body->CreateFixture(&shape, 0); 

私は体を作成した後、私はアクションの初期化:

id a1 = [CCMoveBy actionWithDuration:1 position:ccp(0,-self.position.y+destinationPoint.y)]; 
     id action2 = [CCRepeatForever actionWithAction: 
         [CCSequence actions: [[a1 copy] autorelease], [a1 reverse], nil] 
         ]; 
     [self runAction:action2]; 

各フレーム上に、私は体の場所を更新

_body->SetTransform(b2Vec2(self.position.x/PTM_RATIO,self.position.y/PTM_RATIO), 0); 

物は両方とも描かれていますが、ボディがない間はスプライトは正しい位置にあります。動きはFYI私は、これは確かに問題

答えて

1

ないゲーム全体を通してPTM_RATIOを使用するコヒーレント

あるスプライトの位置は、その親の位置にオフセットされることに注意してください。親がCCNode、CCSceneまたはCCLayer(またはその位置が0,0でない)でない場合、スプライトは親の位置によってオフセットされます。

たとえば、100,100のディメンション(contentSize)を持つスプライトは、位置0,0にあります。子ノードをSに追加します。子ノードの位置は(変更しない限り)-50、-50になります。これは、子ノードが親の実際の位置ではなく、親の左下隅に向いているためです。これはしばしば、経験豊富なcocos2dプログラマでさえも守りません。

関連する問題