Ich habe Probleme mit InputProcessor nur auf meinem IOS Build. Dieser Code funktioniert für Desktop- und Android-Builds, jedoch nicht für iOS.libgdx: IOS auf der Bildschirmtastatur nicht feuern Ereignisse konsequent
Grundsätzlich muss ich ein Ereignis abfangen, wann immer der Benutzer auf der Bildschirmtastatur eingibt. Aber in iOS sehe ich nur mein println für keyTyped intermittierend und nur wenn ich auf der Bildschirmtastatur schnell tippe. Alle anderen Berührungen zeigen nur eine neue Zeile in der Konsole, ich bin mir nicht sicher, woher diese neue Zeilenausgabe stammt.
Das Problem scheint jedoch davon herrühren, dass iOS Ereignisse zurück zu meiner Anwendung sendet und wie LibGDX InputProcessor sie empfängt. Ich habe versucht, ein eigenes Objekt zu erstellen, das TextField erweitert und InputProcessor implementiert, und dann die Instanz dieses Objekts als EingabeProzessor festlegen, aber ich bekomme das gleiche Ergebnis. Wenn ich irgendwo auf dem Bildschirm berühre, der nicht die iOS-Bildschirmtastatur ist, erhalte ich Ereignisse, die konsistent sind.
Dies ist, was die iOS-Konsole Ausgabe wie folgt aussieht, wenn ich sehr schnell ein, wenn ich die println nie verlangsamen Typ auftaucht:
game name field key typed!
game name field key typed!
game name field key typed!
die gleiche Sache auf einem Android-Gerät tun (Nexus 7) Erträge folgendes (was ist das, was ich erwarten würde):
I/System.out: game name field key down!
I/System.out: game name field key up!
I/System.out: game name field key typed!
I/System.out: game name field key down!
I/System.out: game name field key up!
I/System.out: game name field key typed!
I/System.out: game name field key down!
I/System.out: game name field key up!
I/System.out: game name field key typed!
hier ist mein Code:
public class AccountScreen implements Screen {
final PieTherapy game;
private Stage stage;
private TextField gameNameField;
public AccountScreen(final PieTherapy game) {
this.game = game;
initialize();
}
private void initialize() {
Viewport vp = new StretchViewport(PieTherapy.WORLD_WIDTH, PieTherapy.WORLD_HEIGHT, game.cam);
stage = new Stage(vp);
Gdx.input.setInputProcessor(stage);
TextField.TextFieldStyle tfs = new TextField.TextFieldStyle();
tfs.font = game.fontTitle;
tfs.fontColor = Color.WHITE;
tfs.background = new TextureRegionDrawable(new TextureRegion(game.assets.get("menus/textline.png", Texture.class)));
tfs.focusedBackground = new TextureRegionDrawable(new TextureRegion(game.assets.get("menus/textline-selected.png", Texture.class)));
tfs.cursor = new TextureRegionDrawable(new TextureRegion(game.assets.get("menus/cursor.png", Texture.class)));
gameNameField = new TextField("", tfs);
gameNameField.setWidth(PieTherapy.WORLD_WIDTH * .80f);
gameNameField.setFocusTraversal(true);
gameNameField.setPosition(PieTherapy.WORLD_WIDTH *.05f, game.WORLD_HEIGHT * .68f);
// see if the player information has already been entered (edit mode)
gameNameField.setText(game.primaryPlayer.gameName);
gameNameField.addListener(new InputListener(){
@Override
public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
System.out.println("game name field touch up!");
}
@Override
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
System.out.println("game name field touch down!");
return true;
}
@Override
public boolean keyDown(InputEvent event, int keycode) {
System.out.println("game name field key down!");
return super.keyDown(event, keycode);
}
@Override
public boolean keyUp(InputEvent event, int keycode) {
System.out.println("game name field key up!");
return super.keyUp(event, keycode);
}
@Override
public boolean keyTyped(InputEvent event, char character) {
System.out.println("game name field key typed!");
return super.keyTyped(event, character);
}
});
gameNameField.getOnscreenKeyboard().show(true);
gameNameField.setCursorPosition(gameNameField.getText().length());
stage.addActor(gameNameField);
stage.setKeyboardFocus(gameNameField);
}
@Override
public void show() {
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
game.batch.begin();
game.font.draw(game.batch, "Your name in the game! You can stick with the\nautomatically generated" +
"one or change to your own.\n Red: name is not available, " +
"green: available.",
PieTherapy.WORLD_WIDTH *.36f,
PieTherapy.WORLD_HEIGHT *.93f);
game.batch.end();
update(delta);
}
private void update(float delta) {
stage.act(delta);
stage.draw();
game.batch.begin();
game.batch.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
}
}
Libgdx Version: 1.9.6 RoboVM (MobiDevelop) Version: 2.3.1
ich ich immer denke, kann meine eigenen On-Screen-Tastatur rollen ...