while循环中的条件

时间:2014-12-31 14:00:49

标签: 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);
}

2 个答案:

答案 0 :(得分:1)

在您的第二个版本中,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);
    }
}

答案 1 :(得分:0)

您正在为Input.ESC分配Keyboard.isKeyDown(键盘.KEY_ESCAPE)的值一次,然后在您总是比较相同值的同时。

您需要评估Keyboard.isKeyDown(键盘.KEY_ESCAPE)始终要进行比较。