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



看来我的帖子大部分是代码,我不知道要添加什么细节。看来我的帖子大部分是代码,我不知道要添加什么细节。

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,该值保持不变。它要么总是true要么总是false(更有可能)。

您的第一个版本在循环的每次迭代中评估!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/

10-12 03:03