2014-11-24 3 views
0

Я новичок в LibGDX и разработке игр. Спрайт продолжает двигаться вверх EVEN, когда Keys.UP не нажата. Не слишком уверен, почему это происходит, поскольку я пытаюсь заставить его двигаться только в ответ на нажатие Keys.UP.Sprite постоянно перемещается, когда не должно

Я делаю свой собственный класс вводапроцессора, который будет обрабатывать все входы в игру, а не каждый класс, обрабатывающий одни и те же вещи. Мой основной класс вызывает player.update (дельта-время) каждый кадр благодаря методу рендеринга.

Почему он постоянно перемещается, даже если Keys.UP не нажат? Разве это не может закончиться при условии ниже? (GameInputProcessor является экземпляром gip)

Класс игрока:

public void update(float dt){ 

    if (gip.keyDown(Keys.UP)){ 
     this.position.y += this.velocity * dt; 
    } 

GameInputProcessor класс:

public boolean keyDown(int keycode){ 
    switch(keycode){ 

    case Keys.UP: 
     System.out.println("up being pressed"); 
     return true; 
    } 
    return false; 

} 

ответ

0

Вы на самом деле не тестирует состояние клавиши.

gip.keyDown(Keys.UP) 

будет возвращать true true для этого кода.

вы хотите код выглядеть

if(Gdx.input.isKeyPressed(Keys.UP)) 
    this.position.y += this.velocity * dt; 
} 

Если вы хотите класс GDX обернуты затем изменить GIP быть

public boolean keyDown(int keycode){ 
    return Gdx.input.isKeyPressed(keyCode) 
} 
+0

Я делал это, но это означает, что я должен буду поместите его в класс моего игрока, который я не хочу делать, я хочу, чтобы это было обработано в классе GameInputProcessor. Но тогда у него должна быть копия экземпляра игрока из основного класса, где он был изначально сделан. Я не слишком уверен, как передать это классу GameInputProcessor. –

+0

Вы всегда можете просто обернуть вызов gdx. Помогает ли моя помощь? – BevynQ

+0

Огромное спасибо, что сработало. Для дизайна OO это хорошая идея? Разве каждый класс работает только с определенными предметами? –

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