2012-05-25 28 views
1

所以我有一个球(精灵子类),可以拖动屏幕并更新它的身体告诉世界其位置。物理vs图形互相争斗(box2d)

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

世界步进试图通过物理学和更新球的位置。触摸方法也在尝试更新球体和图形位置。理想情况下,当我感动时,我想杀掉任何影响球的物理。

那么究竟应该怎么做才能巩固呢?这也造成了碰撞和过滤问题。任何帮助赞赏。谢谢

+0

为什么只有在触摸被释放后才应用物理? – CodaFi

回答

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

请勿手动设置球精灵的位置。离开这个到物理模拟。随着时间的推移,你的代码会变得非常混乱,如果你必须跟踪你设置手动位置的精灵和哪些使用物理模拟来更新它们的位置。这种方式也容易得多。

0

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