物理与图形互相争斗(box2d)

时间:2012-05-25 21:54:08

标签: iphone ios cocos2d-iphone box2d

所以我有一个球(精灵子类)可以在屏幕上拖动并更新身体以告诉世界它的位置。

问题是,当我在触球时(因此用手指控制)向球施加力时,我有两段代码相互对抗以更新精灵的视觉位置。

世界步进者试图通过物理学并更新球的位置。然而触摸方法也试图更新球的身体和图形位置。理想情况下,触摸时我想杀死任何影响球的物理。

那么究竟应该做些什么来巩固这个呢?这也为碰撞和过滤带来了问题。任何帮助赞赏。感谢

2 个答案:

答案 0 :(得分:1)

你想让球有一个准确的物理模拟吗?如果没有,你可以像这样使用b2body类的SetTransform方法。

    CGPoint ballLocation = ;//use the touched location for this
    b2Vec2 vecBallLocation = b2Vec2(ballLocation.x / 32, ballLocation.y / 32);//calculate this on your own
    b2Body * ballBody = ;//replace this variable with your ball's b2Body;
    ballBody->SetTransform(vecBallLocation, ballBody->GetAngle());

不要手动设置球精灵的位置。把它留给物理模拟。如果您必须跟踪手动设置的精灵以及使用物理模拟更新其位置的精灵,那么随着时间的推移,您的代码会变得非常混乱。这种方式也更容易。

答案 1 :(得分:0)

在拖动物理对象时,在运行物理步骤模拟之前将其速度和角速度设置为0,0。您可能还想暂时获取物理对象的位置,然后逐步,然后设置身体的位置,然后应用从手指移动到身体所获得的任何触摸拖动偏移。