3

我有一个 Sprite 和多个用作项目符号的位图。现在的问题是我希望子弹飞得非常快,但这又给我的碰撞检测功能带来了问题,它的工作方式是每一帧我都在敌人和子弹处创建一个矩形并检查重叠。

现在,如果一颗子弹飞得非常快,它就像从一个点“跳”到另一个点,这意味着如果一个敌人很小并且子弹“跳”在敌人身上,它就不会被注意到。

我想知道的是,是否有一种方法可以检测两个移动物体之间是否会发生碰撞,或者只是看看敌人是否在子弹的轨迹中。

我通过循环遍历一系列敌人来进行碰撞检测,在 for 循环中我循环所有子弹,然后为两者创建一个矩形,并检查每个敌人和子弹与 Rect.intersects 的碰撞。

子弹航向由一个固定点和触摸输入测量,然后通过此函数计算:

public void calcPoint(float x, float y) {
    double alfa = Math.atan(x / y);//x and y are inputs
    bulletPointX = (float) Math.sin(alfa) * speed;
    bulletPointY = (float) Math.cos(alfa) * speed;
}

我不知道如何解决它,我想要一些建议如何做到这一点,并可能有一个例子......

4

1 回答 1

1

有几种方法可以做到这一点,但最简单的可能是预测性碰撞检测。基本上,您将运动分成时间段并检查每个段。如果你有几千个物体在移动,它可能不是很有效,但在大多数情况下它会工作得很好。

它也有几个名字。我提供的链接可以帮助您了解基础知识,但要了解更多信息,请搜索:

  • 帧独立碰撞检测
  • 连续碰撞检测
  • 扫描测试
于 2012-10-19T13:35:17.447 回答