【问题标题】:Swing in game development: The game loop游戏开发中的摇摆:游戏循环
【发布时间】:2014-03-06 04:46:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: java multithreading swing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      通常,您不应在 EDT 上执行与绘画或 GUI 事件处理不直接相关的任何操作。当然,虽然您在技术上可以做到这一点,但当游戏循环变得更加复杂并且必须执行更多计算时,它可能会导致问题。

      当你有一个专门的游戏线程(它执行游戏循环)和 EDT 时出现的同步问题来自这样一个事实,即游戏线程通常会对游戏对象进行修改,这可能会发生 while EDT 正在绘制这些对象。有关更多信息,您必须发布一些当前出现在游戏中的实体的示例代码,以及它们在游戏循环中是如何修改的,以及它们是如何在 EDT 中绘制的。

      【讨论】:

        猜你喜欢
        • 2014-01-21
        • 1970-01-01
        • 1970-01-01
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多