Libgdx如何根据键盘输入设置文本字段?

Libgdx如何根据键盘输入设置文本字段?,libgdx,Libgdx,最近刚开始使用libgdx,我想检查一下如何将键盘输入显示在文本字段上 谢谢。如果您正在寻找键盘,那么来自Kumar的链接就可以了,如果您试图显示文本,那么您需要使用输入处理器从键盘获取输入 然而,要从键盘获得输入,并且仍然有对屏幕上任何其他项目的输入,您需要将其与可以处理多个输入处理器的InputMultiplexer结合起来 例如,如果您有一个要处理输入的阶段,并且希望键盘每隔一段时间弹出一次以进行文本输入,则可以在Create()中的某个位置为键盘创建一个新的InputProcessor

最近刚开始使用libgdx,我想检查一下如何将键盘输入显示在文本字段上


谢谢。

如果您正在寻找键盘,那么来自Kumar的链接就可以了,如果您试图显示文本,那么您需要使用输入处理器从键盘获取输入

然而,要从键盘获得输入,并且仍然有对屏幕上任何其他项目的输入,您需要将其与可以处理多个输入处理器的InputMultiplexer结合起来

例如,如果您有一个要处理输入的阶段,并且希望键盘每隔一段时间弹出一次以进行文本输入,则可以在Create()中的某个位置为键盘创建一个新的InputProcessor

keyboardProcessor = new InputProcessor() {

        @Override
        public boolean touchUp(int screenX, int screenY, int pointer, int button) {
            // TODO Auto-generated method stub
            //dLog("This is the new processor");
            return false;
        }

        @Override
        public boolean touchDragged(int screenX, int screenY, int pointer) {
            // TODO Auto-generated method stub
            //dLog("This is the new processor");
            return false;
        }

        @Override
        public boolean touchDown(int screenX, int screenY, int pointer, int button) {
            // TODO Auto-generated method stub
            //dLog("This is the new processor");
            return false;
        }

        @Override
        public boolean scrolled(int amount) {
            // TODO Auto-generated method stub
            //dLog("This is the new processor");
            return false;
        }

        @Override
        public boolean mouseMoved(int screenX, int screenY) {
            // TODO Auto-generated method stub
            //dLog("This is the new processor");
            return false;
        }

        @Override
        public boolean keyUp(int keycode) {
            // TODO Auto-generated method stub
            //dLog("This is the new processor");
            return false;
        }

        @Override
        public boolean keyTyped(char character) {
            if(newChatMessage == null){
                return false;
            }

            if((int) character == 10  || (int) character == 13){
                dLog("sending in keyTyped");
                sendChatMessage();
                return false;
            }

            final String originalChatMessage = newChatMessage;

            String tempChatMessage = null;
        //  dLog("q1");
            if((int)character == 8){
        //      dLog("q2");
                if(originalChatMessage.length() > 0 ){
                    tempChatMessage = originalChatMessage.substring(0, originalChatMessage.length() - 1);
                } else {
                    tempChatMessage = "";
                    Gdx.app.postRunnable(new Runnable() {

                        @Override
                        public void run() {

                            Assets.soundDoubleBuzzer.play();
                        }

                    });
                }
            } else {
                if(originalChatMessage.length() >= 14){
                    tempChatMessage = originalChatMessage;
                    //dLog("q3");
                    Gdx.app.postRunnable(new Runnable() {

                        @Override
                        public void run() {
                            Assets.soundDoubleBuzzer.play();
                        }

                    });
                } else {
                    tempChatMessage = originalChatMessage + character;
                }
            }
        //  dLog("q4");
            final String realTemp = tempChatMessage;
        //  dLog("q5");
        //  dLog("user pressed character:" + (int)(character));
        //  dLog("current message is :" + realTemp);
            Gdx.app.postRunnable(new Runnable() {

                @Override
                public void run() {
                    lblChat.setText(realTemp);
                    newChatMessage = realTemp;
                }

            });

            return false;
        }

        @Override
        public boolean keyDown(int keycode) {
            // TODO Auto-generated method stub
            //dLog("This is the new processor");
            return false;
        }
    };
填写文本字段时需要注意的部分是KeyTyped()事件。每次键入字符时,它都会调用该方法

然后,将两个输入处理器添加到多路复用器,然后将Gdx.input设置为多路复用器。(该阶段还实现了一个输入处理器…)


这允许两个处理器同时工作。。。第一个进入多路复用器的人首先得到处理输入的机会。。。如果它返回false,而另一个inputProcessor可以处理它,那么它将被传递。。。否则它将被忽略。

您必须更加具体。你试过什么?您正在使用哪些libgdxapi?您好,谢谢您的回复。我尝试使用Gdx.input.isKeyPressed(Keys.ANY_键)检测任何键,然后尝试使用setText()方法设置textfield。我的文本字段是否需要侦听器?请查看此链接以获取有关OnscreenKeyBoardHi的文档,感谢您的回复,我不是在尝试使用OnscreenKeyBoardHi,而是更多地使用笔记本电脑/pc的键盘输入我的程序。我想从键盘上截取字母A。我理解字母A=键A。然后我想更新我的文本字段以显示“A”。每次按下新字母/键时,文本字段将更新并显示字母。在旁注中,您建议我使用哪个,标签还是文本字段?输入法适用于任何一种。正如您在我的示例中所看到的,我在字符串newChatMessage中添加了一个字符(在看到它不太长,是一个有效字符…等等)用于显示,在文本字段或标签上进行个人选择,因为这取决于您希望具有的功能。。。TextField肯定有更多的选项可供选择!嘿,谢谢你的帮助,但我意识到我的文本字段没有更新。我必须为textfield设置侦听器吗?我现在做的是使用textfield1.setText(word);单击按钮时设置文本字段的代码示例<代码>代码按钮1=新文本按钮(“A”,皮肤);button1.addListener(新的ChangeListener(){@Override public void changed(ChangeEvent arg0,Actor arg1){textfield1.setText(“+button1.getText());}});
private String txtVal;

TextField textField= new TextField("textField Vallue", skin);

        textField.setTextFieldListener(new TextFieldListener() {

            @Override
            public void keyTyped(TextField textField, char key) {
                    txtVal= textField.getText();
            }
        });

 System.out.println(txtVal);
private String txtVal;

TextField textField= new TextField("textField Vallue", skin);

        textField.setTextFieldListener(new TextFieldListener() {

            @Override
            public void keyTyped(TextField textField, char key) {
                    txtVal= textField.getText();
            }
        });

 System.out.println(txtVal);