身体在另一个位置被吸引

时间:2012-05-11 15:25:45

标签: iphone cocos2d-iphone

我有一个CCSprite(我有一个b2body);范围是创建一个与身体一起移动到一个位置并返回的精灵;

我用这种方式创建了b2体:

 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);

事情是他们都被画了但是精灵位于正确的位置而身体却没有;这些举措是连贯的

仅供我在游戏中使用PTM_RATIO,所以这肯定不是问题

1 个答案:

答案 0 :(得分:1)

请记住,精灵的位置将是其父级位置的偏移量。如果父节点不是CCNode,CCScene或CCLayer(或它们的位置不是0,0),精灵将被父节点的位置偏移。

例如,尺寸(contentSize)为100,100的精灵(我们称之为S)位于位置0,0。现在,您将子节点添加到S.子节点的位置(除非已修改)将位于-50,-50,因为子节点在父节点的左下角而不是父节点的实际位置定位。这经常让最有经验的cocos2d程序员措手不及。