【问题标题】:How do I delay one image from showing on the screen in Java?如何在 Java 中延迟一张图像在屏幕上显示?
【发布时间】:2018-06-11 18:19:57
【问题描述】:

到目前为止,我正在为我 12 年级的计算机科学开发一款吃豆人游戏。

我想让怪物在游戏中自动移动。我正在为我的游戏使用 Slick2D 和 LWJGL。我的游戏中有一段代码可以控制蓝色怪物的移动位置。

if (bluePosX < 400) {
    try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    bluePosX++;
}

所以基本上我在屏幕上看到的是蓝色怪物自动朝着正确的方向移动。我唯一的问题是当我使用Thread.sleep(100); 时,它会延迟整个屏幕。我只是想延迟蓝色怪物在朝着正确方向移动之前应该等待多长时间。我如何只延迟蓝色怪物图像而不是整个屏幕?

【问题讨论】:

  • 每个怪物一个线程,或者按截止日期排序的演员更新优先队列(其中“演员”是可以在屏幕上移动的东西),您可以在其中设置每个更新操作的截止日期将来。大概是第二种选择。正如我在之前的一个问题上所评论的,另一个关于“关注点分离”的有力论据。
  • 欢迎来到“剥洋葱”的世界,即发现事情比你开始时想象的要多得多,也比你想象的要复杂。我为你为一个高中班级解决如此大的项目的决心鼓掌。祝你好运。
  • @JimGarrison 感谢您的评论!如果我使用 Java Swing Timer 会怎样?这行得通吗?
  • ...Java Swing Timer?" - 这超出了我的专业领域(我自己更多的是后端/数据库人员)。实验....

标签: java lwjgl slick2d


【解决方案1】:

我假设您设置了游戏循环更新的频率,例如每秒 60 次 = 60fps。在这种情况下,100 毫秒等于 6 次更新(每次更新间隔 1000/60 毫秒)。因此,只需等待 6 次更新,然后再更改 bluePosX++

【讨论】:

    【解决方案2】:

    我建议您使用更新方法中的增量。

    见:this

    您可以在变量中计算增量并在达到最大增量后执行特定操作。之后,您可以将 deltaCounter 重置为 0。我不建议使用 Thread.sleep 或任何类似的东西。您可以使用 Java Swing Timer,但通常与时间相关的事情是通过使用 delta 来实现的。它更容易,并且由您使用的引擎提供。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多