gpt4 book ai didi

java - 在 Java Swing 游戏循环中正确使用 SwingWorker

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:52 25 4
gpt4 key购买 nike

我目前正在开发一个涉及数千个 1x1 像素二维矩形围绕 JPanel 移动的模拟.矩形移动并且可以碰撞并连接在一起。

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

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

最佳答案

宽相算法

  • 在模拟系统中限制要检查碰撞的对数的任何算法。

  • 如果您要执行 n^2 次碰撞检查,则需要一个宽相算法。

  • 由于您的对象已经是矩形,我认为一些空间分区技术应该可以帮助您。

资源: Broad-phase collision detection methods?

在大多数应用中,我发现一种高效的宽相位算法可以将所用时间减少几个数量级。但当然这会因情况而异。

祝你好运。

关于java - 在 Java Swing 游戏循环中正确使用 SwingWorker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28596217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com