所以我有一个球(精灵子类),可以在屏幕上拖动并更新它的身体以告诉世界它的位置。
问题是,当我在球被触摸(因此由手指控制)时对球施加力时,我有两段代码相互竞争以更新精灵的视觉位置。
世界步进器正在尝试跟踪物理并更新球的位置。然而,触摸方法也试图更新球的身体和图形位置。理想情况下,当被触摸时,我想杀死任何影响球的物理。
那么我究竟应该做些什么来巩固这一点呢?这也为冲突和过滤带来了问题。任何帮助表示赞赏。谢谢
所以我有一个球(精灵子类),可以在屏幕上拖动并更新它的身体以告诉世界它的位置。
问题是,当我在球被触摸(因此由手指控制)时对球施加力时,我有两段代码相互竞争以更新精灵的视觉位置。
世界步进器正在尝试跟踪物理并更新球的位置。然而,触摸方法也试图更新球的身体和图形位置。理想情况下,当被触摸时,我想杀死任何影响球的物理。
那么我究竟应该做些什么来巩固这一点呢?这也为冲突和过滤带来了问题。任何帮助表示赞赏。谢谢
你想让球有一个准确的物理模拟吗?如果没有,您总是可以像这样使用 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());
不要手动设置球精灵的位置。把它留给物理模拟。如果您必须跟踪手动设置了哪些精灵以及哪些精灵使用物理模拟来更新它们的位置,那么随着时间的推移,您的代码会变得非常混乱。这种方式也容易得多。
拖动物理对象时,在运行物理步骤模拟之前将其速度和角速度设置为 0,0。您可能还想暂时获取物理对象的位置,然后步进,然后将身体的位置设置回来,然后应用您从将手指移动到身体时获得的任何触摸拖动偏移量。