2014-02-08 50 views
0

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

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

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

回答

0

您不应该让游戏逻辑在EDT上执行,因为它很容易让您的用户界面无法响应。只要让你的主循环运行在一个单独的线程上并在那里发布输入事件,并使用SwingUtilities从该线程触发UI重绘。

0

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

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