所以基本上我试图做的是使用LWJGL现在让我的玩家在游戏中移动。玩家目前正在移动,但是当你按住按钮时他并没有继续移动..
public void update(){ 而(Keyboard.next()){
if(Keyboard.getEventKey() == Keyboard.KEY_RIGHT) {
if(Keyboard.getEventKeyState()){
System.out.println("KEY DOWN!");
player.playerMovingRight();
}
else{
System.out.println("KEY RELEASED!");
}
}
}
我尝试使用一段时间(Keyboard.getEventKeyState()),但它只是让游戏崩溃,它无法识别我是否释放了密钥。
那么如果按住按钮而不必快速按下键移动,我怎么能让我的玩家继续前进。如果玩家同时按住2个按钮,我将如何使其工作?
更新的代码:
public void update(){
while(Keyboard.next()){
//If key escape is down we shut the application down
if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)){
System.exit(0);
}
//If key up was pressed move up
else if(Keyboard.getEventKey() == Keyboard.KEY_UP) {
if(Keyboard.getEventKeyState()){
System.out.println("KEY DOWN!");
moveUp = true;
}
else{
System.out.println("KEY RELEASED!");
moveUp = false;
}
}
//If key down was pressed move down
else if(Keyboard.getEventKey() == Keyboard.KEY_DOWN) {
if(Keyboard.getEventKeyState()){
System.out.println("KEY DOWN!");
moveDown = true;
}
else{
System.out.println("KEY RELEASED!");
moveDown = false;
}
}
if(moveUp == true){
player.playerMovingUp();
}
if(moveDown == true){
player.playerMovingDown();
}
}
我仍然遇到与代码相同的问题,我开始认为它们是Keyboard.next()阻止我按住按钮而玩家仍在移动。
答案 0 :(得分:2)
你需要的是一个布尔标志,当按下按钮时触发该标志,并且当按钮被释放时不触发。然后将该标志添加到移动代码之前的if语句中。像这样:
if(Keyboard.getEventKey() == Keyboard.KEY_RIGHT) {
if(Keyboard.getEventKeyState()){
System.out.println("KEY DOWN!");
flag = true;
}
else{
System.out.println("KEY RELEASED!");
flag = false;
}
}
}
//player movement code
if(flag) {
player.playerMovingRight();
}
使用多个键的方法是使用布尔触发器数组并重复检查每个键。
答案 1 :(得分:1)
虽然上述答案可行,但LWJGL能够检测是否按下了按键。但是默认情况下不启用它,因此您需要启用它。要做到这一点,只需在输入初始化的某处将此标志设置为true。
Keyboard.enableRepeatEvents(true);
现在在您的事件循环中,只需检查您的密钥以查看它是否是重复(按住键)。
if(Keyboard.isRepeatEvent())
以下是一个小样本,了解如何检查不同关键状态的密钥。
while(Keyboard.next())
{
if(Keyboard.getEventKey() == Keyboard.KEY_A)
if(Keyboard.getEventKeyState())
{
if(Keyboard.isRepeatEvent())
// Key held down
else
// Key pressed
}
else
// Key released
}
答案 2 :(得分:1)
while(Keyboard.next())
应该与事件一起使用。
在您的情况下,您不希望仅在触发事件时执行某些操作。但是你想要确定每秒多次,无论是否按下了一个键。如果是,你想做某事(例如搬家)。
所以这是使用Keyboard.isKeyDown()
功能的最佳解决方案。
一个小例子:
if (Keyboard.isKeyDown(Keyboard.KEY_UP)) {
System.out.println("pressing KEY_UP");
}
if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
System.out.println("pressing KEY_DOWN");
}
if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {
System.out.println("pressing KEY_LEFT");
}
if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
System.out.println("pressing KEY_RIGHT");
}
此外,可以找到一个好的教程here。