0

最近libgdxを使い始めたばかりで、キーボードからの入力をテキストフィールドに表示する方法を確認したいですか?

ありがとう。

4

2 に答える 2

1

キーボードを探している場合は、Kumar からのリンクで十分です。テキストを表示しようとしている場合は、InputProcessor LibGDX InputProcessorを使用してキーボードから入力を取得する必要があります。

ただし、キーボードから入力を取得し、画面上の他の項目への入力を引き続き行うには、それを複数のInputProcessors を処理できるInputMultiplexer LibGDX 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;
        }
    };

TextField に入力する際に​​注意すべき部分は、KeyTyped() イベントにあります。文字が入力されるたびに、そのメソッドが呼び出されます

次に、2 つの InputProcessor を MultiPlexer に追加し、Gdx.input を multiPlexer に設定します。(ステージは InputProcessor も実装しています...)

private InputMultiplexer multiPlexer;
multiPlexer.addProcessor(keyboardProcessor);
    multiPlexer.addProcessor(stage);
    Gdx.input.setInputProcessor(multiPlexer);

これにより、両方のプロセッサが同時に機能することができます...マルチプレクサに最初に入力されたプロセッサが最初に入力を処理します...それがfalseを返し、他のinputProcessorがそれを処理できる場合、それは渡されます。 ..それ以外の場合は無視されます..

于 2013-09-21T09:23:57.720 に答える
1
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);
于 2014-03-06T06:37:09.097 に答える