当前位置: 首页 > 知识库问答 >
问题:

libgdx-Box2d身体如何检查子弹位置是否达到目标位置?

翟缪文
2023-03-14

这是下面的链接,我如何使用触摸点移动子弹到目标位置。(

我的问题是,如果弹体已经到达目标位置,我如何阻止弹体。

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

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
}

但我想让子弹停在目标位置,也不停在最远距离。但我不知道怎么做。

共有1个答案

高砚
2023-03-14

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

    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
    }

为什么不在这个点上?子弹以一定的速度运动,比如说每秒10像素。如果你有60fps,这意味着每帧子弹移动10/60px。

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

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

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

    float DEFINED_PRECISION = 1/6f;
 类似资料:
  • 平铺贴图对象以像素表示x、y位置,以度表示旋转。 我正在从地图上加载坐标和旋转,并试图将它们指定给box2d实体。位置模型之间存在一些差异,例如平铺对象旋转以度为单位,而box2d躯干角度以弧度为单位。 如何将位置转换为BodyDef坐标x、y和角度,以便在正确的位置创建实体? 使用代码: 当旋转为0时工作,但当旋转不同于0时,主体定位不正确。 我在这里找到了一些提示: http://www.tu

  • 如何检查字节中的某个位是否被设置?

  • 我目前创建了一个动态的身体,并且用Vector2()以恒定的速度移动。我想要的是当身体离开屏幕边缘时,立即从当前点回到原点。我该怎么做?

  • 我想知道位置是否在我的半径范围内。例如,我有我当前位置的“latlng”物体和我有一个更多的“latlng”物体,我想检查这两个物体是否在1km范围内?我该如何实现呢?

  • 问题内容: 我使用64位整数内的位存储标志。 我想知道是否有单个位设置了64位整数中的任何位置(我不在乎任何特定位的位置)。 我可以使用 Bit Twiddling Hacks (由Sean Eron Anderson 撰写) 来计数位数,但是我想知道什么是最有效的方法来检测是否设置了一位。 以及一些维基百科页面: 找到第一个 位操作 汉明重量 注意:我的应用程序是用Java编写的,但是我对使用其

  • 问题内容: 我正在实现是否有位图,那么它应该将图像从imageview保存到内部存储器,否则在应用程序的内部存储器中设置另一个位图。这是代码:_ 问题答案: 您可以按以下方式检查它: 只需检查Bitmap值,如下所示: