Java 游戏开发中的摇摆:游戏循环

Java 游戏开发中的摇摆:游戏循环,java,multithreading,swing,Java,Multithreading,Swing,我正在使用Swing开发Java 2D游戏。我在一个不是EDT的线程中运行游戏循环。大多数时候都没有问题 在我的游戏中,Swing元素的唯一操作是在每个游戏循环周期中repaint()aJPanel 所以我的问题是:我应该使用SwingUtilities.invokeLater()将整个游戏循环放在EDT中吗?或者我应该在不是EDT的线程中运行游戏循环吗?您不应该让游戏逻辑在EDT上执行,因为它很容易使您的UI没有响应。只需让主循环在单独的线程上运行,并在那里发布输入事件,然后使用SwingUt

我正在使用Swing开发Java 2D游戏。我在一个不是EDT的线程中运行游戏循环。大多数时候都没有问题

在我的游戏中,Swing元素的唯一操作是在每个游戏循环周期中
repaint()
a
JPanel


所以我的问题是:我应该使用
SwingUtilities.invokeLater()
将整个游戏循环放在EDT中吗?或者我应该在不是EDT的线程中运行游戏循环吗?

您不应该让游戏逻辑在EDT上执行,因为它很容易使您的UI没有响应。只需让主循环在单独的线程上运行,并在那里发布输入事件,然后使用
SwingUtilities

从该线程触发UI重新绘制。通常,您不应该在EDT上执行与绘制或GUI事件处理无关的任何操作。当然,从技术上讲,您可以做到这一点,但当游戏循环变得更加复杂且必须执行更多计算时,可能会出现问题

当您有一个专用的游戏线程(执行游戏循环)和EDT时,会出现同步问题,这是因为游戏线程通常会对游戏对象执行修改,而这可能在EDT绘制这些对象时发生。为了获得更多信息,您必须发布一些当前游戏中出现的实体的示例代码,以及它们在游戏循环中的修改方式,以及它们在EDT中的绘制方式