使用 LWJGL 进行文本输入

Posted

技术标签:

【中文标题】使用 LWJGL 进行文本输入【英文标题】:Text input with LWJGL 【发布时间】:2012-07-28 13:40:03 【问题描述】:

我正在寻找一种通过 LWJGL 接收文本输入的解决方案。我不是指 LWJGL 提供的那种标准键盘事件输入,我正在寻找接收实际文本输入行的能力,就像 AWT/Swing 提供的 TextFields 一样。我这样做主要是为了学习,因此,我对使用 LWJGL 之外的库(例如 TWL)没有兴趣。

目前,我有这样的事情:

    private boolean shift = false;
    private void chatControls(float ticksPassed) 
        while (Keyboard.next()) 
            if (Keyboard.isKeyDown(Keyboard.KEY_RETURN)) 
                this.ui.toggleChat();
             else if (Keyboard.isKeyDown(Keyboard.KEY_DELETE)) 
                this.chatText = "";
             else if (Keyboard.isKeyDown(Keyboard.KEY_BACK) && Keyboard.getEventKeyState()) 
                try 
                    this.chatText = this.chatText.substring(0, chatText.length() - 1);
                 catch (StringIndexOutOfBoundsException e) 
             else if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) 
                shift = Keyboard.getEventKeyState();
             else if (Keyboard.getEventKeyState() && !jtLetter) 
                if (shift) 
                    this.chatText += Character.toUpperCase(Keyboard.getEventCharacter());
                 else 
                    this.chatText += String.valueOf(Keyboard.getEventCharacter());
                    jtLetter = true;
                
             else 
                jtLetter = false;
            
            this.ui.updateChat(chatText);
        
    

但是,它无法正确处理移位,也无法正确处理上述任何其他特殊命令。那么,最好的做法是什么?

【问题讨论】:

【参考方案1】:

看一下NiftyGUI的源代码this file,里面应该包含这个文本处理代码。

【讨论】:

非常感谢,它确实有一个相对简单的解决方案。这是here 给其他人看。【参考方案2】:

只需删除您的轮班处理行并添加:

if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) && !Keyboard.isKeyDown(Keyboard.KEY_RSHIFT))
        shift=true;

在 While 循环开始之前。

【讨论】:

以上是关于使用 LWJGL 进行文本输入的主要内容,如果未能解决你的问题,请参考以下文章

使用 lwjgl/opengl 进行简单裁剪

在不同系统上使用 VBO 进行 LWJGL 渲染

使用 VBO 使用 LWJGL 对 3D 立方体进行纹理处理

如何使 html 文本输入只读但能够使用脚本进行更新?

使用 UITableView 进行双重输入

使用分类输入数据和图像输入数据进行分类