2014-12-07 2 views
-1

У меня есть эта игра, шутер (2-игровая игра, связанная со слотом датаграммы), и у нее есть корабль.keyPressed event с фиксацией ключа

У меня есть компонент краски для рисования корабля.

до и вниз клавиши для перемещения p2

ж и сек клавиши для перемещения p1

Когда до ключа нажата:

public void keyPressed(KeyEvent e){ 
    switch(e.getKeyCode()){ 

     case KeyEvent.VK_UP: sendData("up start"); break; 

мой (напр.) хоста выполняет sendData("up start") который посылает указанную строку в клиента и, когда клиент получает это, он выполняет shoot.p1.moveUP();, который перемещает p1 корабля на другой клиент 1 пиксель вверх.

Когда я двигаю p2 корабля (напр.) хоста (нажмите клавишу вверх один раз), то p2 корабль на клиента перемещается на 1 пиксель.

(да, каждый раз, когда я нажимаю кнопку вверх на хосте, клиент p2 перемещается 1 пиксель)

Но когда я продлевают на нажатие клавиши (удерживайте клавишу вверх), тем не менее, она движется всего 1 пиксель, даже если окрашенный корабль на хосте двигается, пока я держу ключ.

Как я могу выполнить sendData("up start"), когда ключ удерживается? Я думаю, keyPressed просто выполняет его один раз, когда он находится в paintComponent, который выполняется до тех пор, пока вы находитесь , нажимая ключ.

Я хотел бы, чтобы это решить без использования каких-либо внешних библиотек .. спасибо :)

+0

Этот вопрос не имеет ничего общего с живописью или дейтаграммами. Это просто ключевой вопрос слушателя. – EJP

ответ

1

LWJGL имеет класс клавиатуры можно использовать ...

import org.lwjgl.input.Keyboard;

вы можете использовать метод Keyboard.isKeyDown(Keyboard.KEY_UP);, чтобы получить состояние кнопок, а затем вызвать метод, который отправляет данные, обновляет состояние игры и т. Д.

+0

Нет ли другого способа решить эту проблему без использования lwjgl? – InnZaayynn

+0

это первое, что приходит мне на ум ... – Ubica

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