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

二维文本框的键盘输入

钦海荣
2023-03-14

所以在过去的一天半时间里,我一直被这个问题所困扰。我试图在我的LWJGL游戏中实现一个2D可写的文本框。文本框的呈现不是问题,并且工作得完美无缺。

然而,我的投入并不是很好。问题是我不知道如何检测单键按下,所以它没有在输入字符串中添加“a”,而是添加了“aaaaaaaaaaaaaaaaaaa”,因为游戏时钟很快。

这是我的代码:

private boolean canType = false;

private static long curTime= System.currentTimeMillis();
private static long keyTypeTime = System.currentTimeMillis();
String input = "";

// Game loop
// I'm using a timer to limit typing, which doesn't work that well.

        if (curTime - keyTypeTime >= 100) {
            keyTypeTime = System.currentTimeMillis();
            canType = true;

        }

        if (canType) {
            char c = Keyboard.checkAllKeys();
            canType = false;
            if (c != '*') {
                if (c == '/') {
                    System.out.println("backspace");
                    if (input != null && input.length() > 0) {
                        input = input.substring(0, input.length() - 1);
                    }
                } else if (c == '{') {
                    storyLogic();
                } else {
                    input += c;
                }
            }
        }
package me.mateo226.main;
public static boolean[] keys = new boolean[65536];

// The GLFWKeyCallback class is an abstract method that
// can't be instantiated by itself and must instead be extended
// 
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
    // TODO Auto-generated method stub
    keys[key] = action != GLFW_RELEASE;
}

// boolean method that returns true if a given key
// is pressed.
public static boolean isKeyDown(int keycode) {
    return keys[keycode];
}

public static char checkAllKeys() {
    char key = '*';
    if(isKeyDown(GLFW_KEY_A)) {
        key = 'a';
    }
    if(isKeyDown(GLFW_KEY_Z)) {
        key = 'z';
    }
    if(isKeyDown(GLFW_KEY_SPACE)) {
        key = ' ';
    }
    if(isKeyDown(GLFW_KEY_BACKSPACE)) {
        key = '/';
    }
    if(isKeyDown(GLFW_KEY_ENTER)) {
        key = '{';
    }


    return key;

}

谢了!

共有1个答案

伊羽
2023-03-14
string key2 = null;
public static char checkAllKeys() {
    char key = '*';
    if(isKeyDown(GLFW_KEY_A)) {
        key2 = 'a';
    }
    if(isKeyDown(GLFW_KEY_Z)) {
        key2 = 'z';
    }
    if(isKeyDown(GLFW_KEY_SPACE)) {
        key2 = ' ';
    }
    if(isKeyDown(GLFW_KEY_BACKSPACE)) {
        key2 = '/';
    }
    if(isKeyDown(GLFW_KEY_ENTER)) {
        key2 = '{';
    }

     if(!isKeyDown(GLFW_KEY_A)&&key2=='a') {
        key = 'a';
        key2 = null;
    }
    if(!isKeyDown(GLFW_KEY_Z)&&key2=='z') {
        key = 'z';
        key2 = null;
    }
    if(!isKeyDown(GLFW_KEY_SPACE)&&key2==' ') {
        key = ' ';
        key2 = null;
    }
    if(!isKeyDown(GLFW_KEY_BACKSPACE)&&key2=='/') {
        key = '/';
        key2 = null;
    }
    if(!isKeyDown(GLFW_KEY_ENTER)&&key2=='{') {
        key = '{';
        key2 = null;
    }
}
 类似资料:
  • 我想控制Javafx TextField中的输入,以便只允许数字输入,并且如果超过了最大字符数,则不会对TextBox进行任何更改。 编辑:根据注释中的建议,我使用了JavaFX项目负责人建议的方法。阻止信件被输入很有效。我只需要它也过滤特殊字符。我尝试将筛选器更改为(text.matchs([0-9]“),但这不允许输入退格符。

  • 问题内容: 有人知道如何将文本框中的键盘插入符移动到特定位置吗? 例如,如果一个文本框(例如,输入元素,而不是文本区域)中包含50个字符,而我想将插入号放置在字符20之前,我该如何处理? 这与以下问题有所不同:jQuery在TextArea中设置光标位置,这需要jQuery。 问题答案: 摘自Josh Stodola的使用Javascript在Textbox或TextArea中设置键盘插入符号的位

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

  • 问题内容: 我正在开发一个使用WebView指向基于jQueryMobile的站点的Android应用程序。通常,禁用软键盘上的“转到”按钮就像添加到控件的XML标签一样简单。但是,对于WebViews而言,这样做并不成功。 如何禁用自动执行表单提交的“开始”按钮,或者像EditText 那样简单地将其替换为“完成”按钮? 问题答案: 您可以通过放置表单事件来停止提交表单。

  • 点击文本输入框,如何屏蔽系统默认键盘弹起行为