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

LWJGL键盘输入不工作

籍弘伟
2023-03-14

我正在编写一个LWJGL应用程序,我在让键盘和鼠标类工作方面遇到了一些困难。永远不会调用MouseWheelMove、keyPressed和KeyRelease方法。我可以确认调用了Listener.Update方法。

在这个应用程序中,我将显示嵌入到一个JFrame中,但是即使我不这样做,它仍然不能工作,所以这似乎不是问题所在。

控制台输出:


呈现器初始化:

@Override
public void run() {
    try {
        Display.setParent(canvas);
        Display.create();
        Display.setResizable(false);
        Display.setTitle("Display");
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glOrtho(0, 1, 0, 1, 0, 1);
        draw();
        listener.initialize();
    } catch (LWJGLException ex) {
        System.out.println("Could not initialize renderer: " + ex.getMessage());
        Thread.currentThread().interrupt();
    }
    do {
        listener.update();
        if(shouldUpdate)
            draw();
        Thread.yield();
    } while(!closing);
    System.out.println("Renderer Stopping");
    try {
        Display.destroy();
    } catch(Exception ex) {
        System.out.println("Error while stopping renderer: " + ex.getMessage());
    }
    listener.destroy();
    System.out.println("Renderer End");
}


侦听器类:

public void initialize() {
    try {
        Mouse.create();
        Keyboard.create();
        Keyboard.enableRepeatEvents(true);
        System.out.println("Keyboard & Mouse listener initialized");
    } catch (LWJGLException ex) {
        System.out.println("Could not initialize listener");
        Thread.currentThread().interrupt();
    }
}
public void update() {
    while(Keyboard.next()) { // Never True
        int key = Keyboard.getEventKey();
        if(Keyboard.getEventKeyState())
            keyPressed(key); // Never Called
        else
            keyReleased(key); // Never Called
        System.out.println(Keyboard.getKeyName(key)); // Never Printed
    }
    int amount = Mouse.getDWheel(); // Always 0
    if(amount != 0)
        mouseWheelMoved(amount); // Never Called
}

共有1个答案

强才捷
2023-03-14

我想我需要调用“display.update()”来刷新键盘输入。

您可以省略此行为,并通过调用display.processMessages()、mouse.poll()和keyboard.poll()手动更新输入。

 类似资料:
  • 8.3.1 键盘输入的中断功能 键盘输入是绝大多数程序的主要输入方式,学习和掌握有关键盘输入中断的使用方法对编写交互式程序是非常重要的,也能更进一步理解计算机是如何接受键盘输入的。 1、键盘缓冲区 键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下: KBHead DW ? ;其内存地址为0000:041AH,缓冲区头指针 KBTail DW ? ;其内存地址为0000:041CH,缓冲区尾指

  • 问题内容: 我正在尝试用C语言编写一个程序(在Linux上),该程序将循环直到用户按下某个键为止,但不要求按下键盘来继续每个循环。 有没有简单的方法可以做到这一点?我认为我可以做到这一点,但这似乎需要大量工作。 或者,有没有办法在程序关闭之前捕获- 按键进行清理,而不是非阻塞io? 问题答案: 如前所述,您可以使用ctrl-c 陷阱或任何标准输入。 但是请注意,使用后一种方法时,您还需要设置TTY

  • 问题内容: 我正在用Java编写游戏,现在是Swing + JOGL-一个带有GLCanvas的JFrame。 我使用etc.事件()处理输入,但似乎无法正常工作: 当我同时按下3个以上的键时,它们无法正确注册 -显然这是键盘的错误,我必须找到替代的控制方案。 窗口丢失后,重新获得焦点,输入完全停止工作… 我究竟做错了什么? 有没有更好的方法来处理Java中的键盘输入? (除非我别无选择,否则我不

  • 我遇到的问题是,如何发送enter以结束循环?因为系统。在里面read()取第一个数字,如果我再加上2个数字,示例可以是, 条目: 2 3(输入)读2个数字和和 1 2(输入)读2个数字和和 (enter)这里结束循环,因为enter和no数字,并给出了解决方案 出口: 5. 3. 我不知道我以前发过什么

  • 我需要隐藏软键盘以响应单击按钮。我看到了一些关于这方面的帖子,我尝试了: 这很有效。但现在我有两个EditText视图。无论选择了哪个EditText,现在如何隐藏软键盘?我也试过了 ,但那不起作用... 谢谢你的帮助! 编辑:找到解决方案。贴在下面。

  • 目前为止,我们的脚本都没有交互。也就是说,它们都不需要用户的输入。本节,我们将学习脚本如何问问题,并获取以及使用其响应。 read 要从键盘读取输入,使用 read 命令。read 命令从键盘读取输入并将其赋值给一个变量。例如: #!/bin/bash echo -n "Enter some text > " read text echo "You entered: $text" 注意 ech