Box2d 正文如何检查子弹位置是否已到达目标位置



这是下面的链接,我如何使用触摸点将项目符号移动到目标位置。(使用 libgdx 和 box2d 将身体移动到触摸位置)

我的问题是,如果子弹体

已到达目标位置,如何停止子弹体。

我已经尝试了下面的代码,并且它工作正常。

PIXEL_TO_METER = 1/32.0f
time step = 1/45.0f, velocity iteration = 6, position iteration = 2
float distanceTravelled = targetDirection.dst(bulletPosition);
if(distanceTravelled >= MAX_DISTANCE){
   // stop
} else {
  // move body
}

但我想在目标位置停止子弹,也不在MAX_DISTANCE上停止子弹。但我不知道该怎么做。

您需要检查子弹是否足够接近您的目标,以表明它已到达目标。

    float distance = targetPosition.dst(bulletPosition);
    if(distance <= DEFINED_PRECISION){
        // stop
        // also you can set the target's position to the bullet here
    } else {
        // move body
    }

为什么正好在点上?子弹以某种定义的速度进行,例如每秒 10px。如果你有60fps这意味着在每一帧中子弹都会移动 10/60 像素

如果项目符号从位置开始0则它的下一个位置(在下一帧中)将是

1/6 (frame 1)
2/6 (frame 2)
3/6 (frame 3)
...

如果目标处于1.5/6的位置,您可以看到,尽管在frame 1子弹尚未到达目标,但在下一帧中它已经通过了目标,就像从未检测到碰撞一样。这就是为什么您需要定义一些精度。它的值应至少为 1 帧步长,因此在这种情况下,它将是1/6

    float DEFINED_PRECISION = 1/6f;

最新更新