2012-05-11 2 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); 

두 가지 모두 그려져 있지만 몸체가 올바르지 않은 동안 스프라이트가 올바른 위치에 있습니다. 움직임은 그래서 이것은 스프라이트의 위치가 부모의 위치로 상쇄 될 것이라는 점을 명심 확실히 문제

답변

1

하지

은 참고로 내가 게임을 통해 밖으로 PTM_RATIO을 사용하여 일관된입니다. 부모가 CCNode, CCScene 또는 CCLayer (또는 그들의 위치가 0,0이 아닌) 인 경우, 스프라이트는 부모의 위치에 의해 오프셋됩니다.

예를 들어 차원 (contentSize)이 100,100 인 스프라이트 (S라고 함)는 위치 0,0에 있습니다. 이제 자식 노드를 S에 추가합니다. 자식 노드의 위치 (수정하지 않은 경우)는 자식 노드가 부모의 실제 위치 대신 부모의 왼쪽 하단에 위치하기 때문에 -50, -50에 위치합니다. 이것은 종종 가장 경험 많은 cocos2d 프로그래머조차도 경비를 버립니다.