设置场景: •我们的环境:LibGdx Android& iOS //如果你不了解LibGdx,那很好,只要知道这个程序是为iOS和Android构建的
•我们的屏幕上没有任何内容,只有Box2d Circle
好的,那么,我需要做什么? 我需要将我的Box2d Circle变为"传送"屏幕被点击的地方...但我需要它有一些速度,所以如果它与其他东西发生碰撞,它会抛弃另一个物体。
我目前正在使用body.setTransform(),但我没有速度,人们说这是非常错误的。
我该怎么做?谢谢!
答案 0 :(得分:2)
setTransform 方法本身并不是错误的。 由于忽略了:
时出现的物理因素,可能会造成一些麻烦您正在描述的情况是使用 setTransform 时的完全典型情况,我认为没有理由害怕它。你也不需要任何速度。
但是,如果您决定将“传送”机制更改为应用速度将对象移动到世界点,您应该:
通过减去目标位置和身体位置来计算速度矢量
Vector2 velocity = target.sub( body.getPosition() ) ); //where target is Vector2 of touched point
将速度限制到某个最大值我猜如果你需要(这是可选的)
//optional
velocity.nor();
velocity.mul( MAX_VALUE ); //MAX_VALUE is a float
将速度设置为正文
body.setLinearVelocity( velocity );
添加到主循环(渲染方法)检查主体是否处于目标位置(或在某个范围内 - 由于精度,如果您将限制速度,它很可能精确地在目标位置 - 如果不是我猜它应该在world.update())的一次迭代后处于目标位置
if( body.getPosition().sub( target ).len() < SOME_PRECISION )
{
body.setLinearVelocity( new Vector2(0, 0) );
}
你也可以看一下Box2D MouseJoint,虽然我从来没有使用过这个,但不能提供任何提示。