最近libgdxを使い始めたばかりで、キーボードからの入力をテキストフィールドに表示する方法を確認したいですか?
ありがとう。
キーボードを探している場合は、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がそれを処理できる場合、それは渡されます。 ..それ以外の場合は無視されます..
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);