我有一个b2Body,我想在某个目标位置移动.我不想使用SetPosition函数.我怎样才能实现这个目的:
我正在使用Box2DAS3 2.1a.任何其他语言的帮助也将不胜感激.
小智 48
最简单的方法实际上是使用SetPosition/ SetTransform(position,angle).例如:
body->SetTransform(b2Vec2(0,0),body->GetAngle())
Run Code Online (Sandbox Code Playgroud)
显然,瞬时跳跃意味着你正在颠覆物理模拟,但它是设置身体位置最简单最直接的方法.
鉴于您不想使用SetPosition(这相当于上面公布的代码),那么ApplyLinearImpulse使用适当的力(基于身体的质量和当前速度)将起到作用,并且从模拟点更正确 -观点,但由于潜在的副作用等可能会出现更多问题.
无论如何,iforce2d覆盖了SetLinearVelocity...,我想补充说,即使不涉及"鼠标",鼠标关节也非常有用.
ifo*_*e2d 20
最简单的方法是设置身体的线速度,使其在一个时间步长内覆盖必要的距离.例如.如果身体需要移动(2,3)个单位以到达所需的位置并且您的时间步长为60Hz,则可以使用SetLinearVelocity(120,180)一次.在下一个时间步骤中,您当然必须将速度设置回零以阻止它飞向远处.如果您使用了SetTransform,那么结果并没有太大的不同,除了CCD可以工作,如果有什么事情会被打乱.
如果你不希望身体在一个时间内到达,只需限制它可以拥有的最大速度.
如果你更愿意使用ApplyForce/ApplyLinearImpulse,你可以做类似的事情,但你也需要考虑身体的当前速度.你可能会发现这个页面很有用,它解释了这个的轮换版本,但原理是相同的:http://www.iforce2d.net/b2dtut/rotate-to-angle