libgdx - события ввода актера не срабатывают

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

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

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

Вот мой код:

...
    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.

Спасибо!


person rsan    schedule 18.03.2012    source источник


Ответы (1)


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

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

    Gdx.input.setInputProcessor(stage);
}
person Ludevik    schedule 18.03.2012
comment
Спасибо, бро, это был глупый вопрос, но этому игровому движку все еще не хватает хорошей документации (это не критика движка, честно говоря, я считаю его потрясающим проектом). Могу ли я в любое время заменить этот процессор ввода другим этапом? - person rsan; 18.03.2012
comment
Для этого вы можете использовать InputMultiplexer. Вы можете добавлять/удалять входные процессоры в мультиплексор по мере необходимости. Или просто установите другой InputProcessor, когда вам нужно. - person Ludevik; 18.03.2012