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

时间:2014-02-08 18:51:43

标签: java multithreading swing

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

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

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

2 个答案:

答案 0 :(得分:0)

你不应该让游戏逻辑在EDT上执行,因为它可以轻松使你的UI无法响应。只需让你的主循环在一个单独的线程上运行并在那里发布输入事件,并使用SwingUtilities从该线程触发UI重绘。

答案 1 :(得分:0)

通常,您不应该在EDT上做任何与绘画或GUI事件处理无直接关系的事情。当你在技术上可以这样做时,当然,当游戏循环变得更复杂并且必须执行更多计算时,它可能会引起问题。

当您拥有专用游戏线程(执行游戏循环)时出现的同步问题,而EDT来自通常游戏线程将对游戏对象执行修改的事实,这可能发生在同时 EDT正在绘制这些对象。有关详细信息,您必须发布游戏中当前出现的实体的一些示例代码,以及如何在游戏循环中修改它们,以及如何在EDT中绘制它们。