为什么此代码有效(窗口在转义按钮上关闭)?
看起来我的帖子主要是代码,我不知道要添加什么细节。它看起来我的帖子主要是代码,我不知道要添加什么细节。
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);
}
答案 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)始终要进行比较。