java - while 循环中的条件

标签 java while-loop conditional-statements lwjgl

为什么这段代码有效(窗口在退出按钮上关闭)?

<小时/>

看起来我的帖子主要是代码,我不知道要添加哪些细节。看起来我的帖子主要是代码,我不知道要添加哪些细节。

public class Main
{
    public static void main (String[] args)
        {
            start(); //Create a window
            render(); //Run the game
            close(); //End the game
        }

    private static void start()
    {
        Window SD = new Window();
        SD.Launch();
    }

    private static void render()
    {
        while(!Display.isCloseRequested() && !Keyboard.isKeyDown(Keyboard.KEY_ESCAPE))
        {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

        Display.update();
        }
    }

    private static void close()
    {
        Display.destroy();
    }
}

但是这段代码没有:

//
while(!Display.isCloseRequested() && !Input.ESC)
//

public class Input
{
    public static boolean ESC = Keyboard.isKeyDown(Keyboard.KEY_ESCAPE);
}

最佳答案

在第二个版本中,Keyboard.isKeyDown(Keyboard.KEY_ESCAPE) 被评估一次,并将其值分配给 ESC,该值保持不变。它要么总是正确,要么总是错误(更有可能)。

您的第一个版本会在循环的每次迭代中评估 !Keyboard.isKeyDown(Keyboard.KEY_ESCAPE),因此它可以检测何时实际按下 ESC。

如果将 ESC 更改为静态方法而不是静态变量,则表达式将在每次调用 ESC() 时进行计算,并且两个循环都将起作用。

while(!Display.isCloseRequested() && !Input.ESC())
//

public class Input
{
    public static boolean ESC() 
    {
        return Keyboard.isKeyDown(Keyboard.KEY_ESCAPE);
    }
}

关于java - while 循环中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27722179/

相关文章:

java - Azure Web应用程序写入和读取文件

mysql - 如何将一个表中的一行更新到另一个表中?

r - 如何在 R 中的特定条件下删除行?

java - Jenkins 中的 Fitnesse 插件

java - 通过 WebAppContext extraClasspath 管理许多 jar

c - 这是对 fgetc 的有效使用吗?

java - while 循环中的 Thread.sleep() 无法正常工作?

reactjs - 如何根据请求路由中的参数实现条件路由?

java - 复制 xml 中的 View

bash - 运行命令直到返回代码大于 x