2012-03-18 2 views
2

Im тестирование libgdx, но я застреваю в обработке ввода пользователем.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.

Спасибо!

ответ

16

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

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

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

Спасибо братан, это был глупый вопрос, но эта игра двигатель кадры не хватает из хорошей документации (Это не критика против двигателя, если честно, я считаю это потрясающий проект). Могу ли я в любое время переопределить этот входной процесс с другой стадией? – rsan

+2

Для этого вы можете использовать InputMultiplexer. Вы можете добавить/удалить InputProcessors в мультиплексор по мере необходимости. Или просто установите другой InputProcessor, когда вам нужно. – Ludevik

+0

Tnx, работает отлично :) – rsan

Смежные вопросы