问题
如果子弹到达目的地,身体正在颤抖,从目的地到前一个位置后退并再回到堡垒 目的地......等等... 奇怪的行为
示例代码
Vector2 targetPosition =
// Copied target position and subtracted by bullet position
Vector2 targetDirection = targetPosition.cpy().sub(bulletPosition);
float distance = bulletPosition.dst(targetPosition);
float speed = 16;
Vector2 velocity = targetDirection
.cpy() // Copied target direction
.nor() // normalize to avoid getting the direction as speed
.scl(speed); // scaled by speed
// the distance is not accurate, so we get the time step as defined precision
float DEFINED_PRECISION = Constants.TIME_STEP;
// check if the bullet is near or maybe match the touch point
if(distance >= DEFINED_PRECISION) {
// move the bullet
body.setLinearVelocity(velocity);
} else {
// stop the bullet
body.setLinearVelocity(0,0);
}
答案 0 :(得分:2)
您的DEFINED_PRECISION
可能太低了 - 您应该在每个步骤中注销body's
位置(即使在您的循环中添加System.out.println(body.getPosition());
之类的东西)并检查它是否更大。< / p>
那时情况就是
distance
大于DEFINED_PRECISION
所以它正在向前移动distance
大于DEFINED_PRECISION
所以正在移动向后 distance
大于DEFINED_PRECISION
... 这就是为什么它在颤抖:)
首先,您应该更改DEFINED_PRECISION
- 检查在一个框架中移动多少身体,此值除以2
应为{{1} (因为在两帧之间存在身体和目标之间的最大距离)。另外我想这比设置DEFINED_PRECISION
更好,因为velocity
会将目标的位置设置为直接
(0,0)
当然,如果您的步骤不是很大 - 那么更改将是不可见的,最终位置将完全是目标位置