libgdx - события ввода актера не запускаются - PullRequest
2 голосов
/ 18 марта 2012

Я тестирую libgdx, но я застреваю в обработке пользовательского ввода.

Моей первой попыткой было использование Gdx.input непосредственно из метода рендеринга, но я чувствую, что заново изобретаю колесо, потому что пишу много кода для определения области ввода при получении событий касания.

Я почти уверен, что лучше использовать класс Actor, но я должен что-то делать неправильно, потому что события никогда не запускаются.

Вот мой код:

...
    Texture texture = new Texture(Gdx.files.internal("assets/sprite-sheet.png"));
            singlePlayerButton = new Image("SinglePlayerButton", new TextureRegion(texture,0,0,50,50)){

                @Override
                public boolean touchDown(float x, float y, int pointer) {
                    // TODO Auto-generated method stub
                    System.out.println("touch down");
                    return super.touchDown(x, y, pointer);
                }

                @Override
                public void touchUp(float x, float y, int pointer) {
                    System.out.println("touch up");             
                }

            };

            stage.addActor(singlePlayerButton);
...

public void render(float delta) {
        // Clear the screen
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);           
        stage.draw();
        spriteBatch.end();
    }

Изображение отображается хорошо, но не имеет значения, сколько раз я нажимаю на него, событие не срабатывает. Что мне не хватает? Зарегистрировать событие? Я не могу найти метод addTouchListener () в классе Stage или Actor.

Спасибо!

1 Ответ

16 голосов
/ 18 марта 2012

Вы должны зарегистрировать все входные процессоры в libGDX. Этап реализует InputProcessor, поэтому вы должны зарегистрировать его:

@Override
public void create() {
    //... initialization

    Gdx.input.setInputProcessor(stage);
}
...