当前位置: 首页 > 知识库问答 >
问题:

LWJGL按住一个键

陶宏浚
2023-03-14

所以最基本的,我想做的是使用LWJGL让我的球员在比赛中移动。玩家当前正在移动,但当你按住按钮时,他没有继续移动。

        if(Keyboard.getEventKey() == Keyboard.KEY_RIGHT) {
            if(Keyboard.getEventKeyState()){
                System.out.println("KEY DOWN!");
                player.playerMovingRight();
            }
            else{
                System.out.println("KEY RELEASED!");
            }
        }
    }

更新的代码:

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()阻止了我按住按钮,而播放器仍然在移动。

共有1个答案

孔华池
2023-03-14

您需要的是一个布尔标志,它在按下按钮时触发,在释放按钮时不触发。然后将该标志添加到移动代码之前的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();
}

使用多个键的方法是使用布尔触发器数组并重复检查每个键。

 类似资料:
  • 编辑:我已经解决了这个问题,并修改了这个。给你,修改后的版本。(该死的,TeamViewer..)

  • 我正在尝试键绑定和键以使角色左右移动,但当您按下这些键时,这些动作只会发生一次。当按住或时,如何修改此代码以使其执行事件?

  • 问题内容: 我创建了一个按钮,我想要这些: 当用户单击按钮时,它将保持按下状态约3秒钟。3秒钟后,按钮应再次看起来可按下。因此,用户必须等待3秒钟才能再次单击该按钮。我尝试了这些: 你有什么建议吗? 问题答案: 可能对您有帮助

  • 我遇到了一个奇怪的JavaScript问题。我正在开发一个使用键盘输入的HTML5画布游戏。游戏的双人模式需要按住键盘上最多6个键。 在我按住键盘上的4或5个键后,似乎停止调用“keyDown”事件。 我使用的代码如下: 控制台应该为我按下的每个键记录一个键代码。然而,它似乎只报告我按住的前4或5个键的密码。这导致了当两个玩家按下太多键时,我的游戏的双玩家版本的控件无法工作。 这是一个bug,是J

  • 问题内容: 我正在使用Java通过Robot类生成鼠标按下: 但是,我希望机器人在一定时间内按下按钮。我该如何实现? 问题答案: 只需在两个动作之间睡眠一下(以毫秒为单位):

  • 我目前正在从事一个项目,该项目涉及将LWJGL游戏场景渲染为视频流而不是窗口。我相信,如果将游戏场景渲染为中间格式(如 ByteBuffer),我就能实现这一目标。我正在尝试扩展LWJGL 演示作为概念证明。 我发现了一个类似的SO问题和一个论坛帖子,但我无法做到这一点。我是OpenGL和LWJGL的初学者,我正在努力寻找关于这方面的可理解文档。 在渲染循环()的开始,调用函数。根据我的理解,它将