2014-02-09 2 views
2

Я делаю игру в libGDX.libGDX make touchDown loop до touchUp

Я хочу реализовать элементы управления играми, но у меня есть проблема с методом touchDown. Метод touchDown выполняется только один раз. Я хочу контактировать с коннектором до тех пор, пока не будет вызвана touchUp. Кто-нибудь может мне помочь ?

class onPlayerGoLeftListener extends InputListener { 

    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { 
     //start runnable (move player)  

     return true; 
    } 

    public void touchUp (InputEvent event, float x, float y, int pointer, int button) { 
     //stop runnable 
    } 

} 

Благодаря

P.S. Я не люблю использовать основной метод обновления для этого.

ответ

9

Вы не можете «зацикливаться» на обратном вызове события или обработать обратный вызов, поскольку вся система остановится. Один из способов получить то, что вы хотите, - установить флаг в методе touchDown, очистить флаг в методе touchUp, а затем поместить «тело» вашего цикла в render, охраняемый вашим флагом.

boolean touchActive = false; 

public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { 
    //start runnable (move player)  
    touchActive = true; 
    return true; 
} 

public void touchUp (InputEvent event, float x, float y, int pointer, int button) { 
    //stop runnable 
    touchActive = false; 
} 


public void render(float delta) { 
    ... 
    if (touchActive) { 
     // Do one iteration of your "while" loop 
    } 
    ... 
} 
+0

Будет ли enableRepeatableEvent (истина), также может быть решение? Или это только для событий клавиатуры? Я использую подход, который вы написали выше, но я хочу знать, будет ли работать другое решение. – Springrbua

0

В визуализации() или в розыгрыше нити вы можете просто использовать

if (Gdx.input.isTouched()){ 
    //some thing move() 
} 
Смежные вопросы