我目前正在开发一个模拟,其中涉及围绕JPanel移动的数千个1x1像素2D矩形。矩形会移动并且会碰撞并连接在一起。

我创建了一个Event Dispatch Thread,它又创建了我的GUI。然后,我将创建一个模拟实例,并使用游戏循环使用move()detectCollision()repaint()方法控制系统,所有矩形均存储在全局ArrayList中。 move()将每个矩形移动1个像素,而detectCollision()检查两个矩形是否彼此相邻,并将它们连接在一起(如果适用)。

该系统当前可以运行,但是运行速度非常慢。在每种方法周围放置一个计时器表明,我的detectCollision()方法最多可能需要1000毫秒才能完成。我的问题是,我可以在detectCollision()方法内使用辅助线程来提高程序效率吗?

最佳答案

广相算法

  • 它是限制模拟系统中要检查碰撞对的对数的任何算法。
  • 如果要执行n ^ 2个冲突检查,则需要一个广义阶段算法。
  • 因为您的对象已经是矩形,所以我认为一些空间分区技术应该可以为您提供帮助。

  • 资源: Broad-phase collision detection methods?

    在大多数应用中,我已经看到了一种有效的广相算法可以将所需的时间减少几个数量级。但是,当然这会因情况而异。

    祝好运。

    07-26 09:28