gpt4 book ai didi

java - 为什么在 While(true) 循环中需要额外的一行代码?

转载 作者:行者123 更新时间:2023-11-29 05:53:22 25 4
gpt4 key购买 nike

我正在为 CS 类(class)编写游戏。

有一个 GUI MyDisplay,它是一个带有 JFrame 的扩展 KeyListener 和一个打包的 JPanel[][] 实例变量。

MyGame 有一个名为 GameState 的私有(private) enum,它是 MENUPLAYQUITPAUSEMyGame 具有 static void main 方法,该方法具有以下构造:

MyGame如下:

public class MyGame
{
/* Private instance fields and constructor left out.
Constructor initializes a MyDisplay and state = MENU */

public static void main(String[] args)
{
MyGame g = new MyGame();
while(true)
{
gstate = g.getState();
if(gstate == GameState.PLAY)
g.play();
else if(gstate == GameState.PAUSE)
g.pause();
else if(gstate == GameState.MENU)
g.menu();
}
}

/* implementation of MyGame methods */
}

playpausemenu 会调用对 MyDisplay 的各种调用以绘制新内容。状态可以改变的唯一方法是用户按下回车键。然后,MyDisplay 调用名为 enterPressedMyGame 方法,相应地更改状态。

当我编译它时,游戏运行不正常。当我按下 enter 键(并打印出状态以进行检查)时,我注意到 MENU 应该变为 PLAY。但是即使状态在 PLAY 中,g.play() 也没有被评估(我测试了控制台是否在 play( )).

但真正让我感到困惑的是,当我输入任何对 System.out 的调用时,例如 System.out.print("");main 的 while 循环,一切正常,并且 g.play() 被正常调用。

最佳答案

您正在点击 thread starvation案件。因为你的初始状态是 MENU 循环消耗了所有的 cpu,而 UI 没有机会消耗你的按键事件。尝试小睡一会儿,例如:sleep(10)

Here您会发现更多信息和大量替代方案,甚至 Timer 对 CPU 更友好,但还有更好的方法,具体取决于您的游戏逻辑。

关于java - 为什么在 While(true) 循环中需要额外的一行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com