27.01.2015 / 01:28 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Ксакеп, Конечно. Это же основа всего. __________________
let live |
27.01.2015 / 21:44 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| А подобная реализация java.awt.event.KeyAdapter (для ловли нажатой в данной момент кнопки) может считаться костыльной? Может, есть какие-нибудь альтернативы? Например, в Java ME можно ловить кнопку с помощью метода getKeyStates() из javax.microedition.lcdui.game.GameCanvas. Сейчас рисование происходит на java.awt.Canvas, из-за чего, собственно, и появился вопрос. Открыть спойлер Закрыть спойлер package code.kalter.longflight.game;
import code.kalter.longflight.Crutch;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
/**
* @author Kalter
*/
public class KeyHandler extends KeyAdapter {
@Crutch("Точно?")
private boolean up;
private boolean down;
private boolean left;
private boolean right;
public boolean isUp() {
return up;
}
public boolean isDown() {
return down;
}
public boolean isLeft() {
return left;
}
public boolean isRight() {
return right;
}
@Override
public void keyPressed(KeyEvent key) {
switch(key.getKeyCode()) {
case KeyEvent.VK_UP: {
up = true;
break;
}
case KeyEvent.VK_DOWN: {
down = true;
break;
}
case KeyEvent.VK_LEFT: {
left = true;
break;
}
case KeyEvent.VK_RIGHT: {
right = true;
break;
}
}
}
@Override
public void keyReleased(KeyEvent key) {
switch(key.getKeyCode()) {
case KeyEvent.VK_UP: {
up = false;
break;
}
case KeyEvent.VK_DOWN: {
down = false;
break;
}
case KeyEvent.VK_LEFT: {
left = false;
break;
}
case KeyEvent.VK_RIGHT: {
right = false;
break;
}
}
}
}
__________________
Homo homini penis est. Изменено Kalter (27.01 / 21:44) (всего 1 раз) |
27.01.2015 / 21:58 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| Kalter, у меня вообще заведен ArrayList для всех нажатых кнопок. Boolean точно не самое гибкое решение
Изменено DominaN (27.01 / 21:58) (всего 1 раз) |
27.01.2015 / 21:59 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Kalter, нормальная реализация. Ещё можно не заводить на каждую кнопку по boolean'у, а использовать HashMap.
__________________
let live |
27.01.2015 / 22:19 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| aNNiMON, ArrayList достаточно, зачем HashMap?
|
27.01.2015 / 22:46 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| Спасибо.
Здесь нужно смотреть по типу контейнера. Кажется, лучше использовать HashMap. А если и List, то его реализацию LinkedList.
__________________
Homo homini penis est. Изменено Kalter (27.01 / 22:46) (всего 1 раз) |
27.01.2015 / 23:10 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| Kalter, не, LinkedList вообще бессмысленно, только больше тормозить будет. Не забывай, что нажатие клавиш - абсолютно ни с чем не синхронизированный процесс, тут уж как игроку приспичит. Если хочешь, могу привести пример, как сделано у меня. Класс AFTRuntime максимально отвязан от листенера клавиш, а реализовывает лишь хранение и управление нажатыми клавишами
|
27.01.2015 / 23:19 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| Цитата DominaN: тут уж как игроку приспичитПредставил Впрочем то да, ArrayList должно хватить. Попробуй привести пример, интересно. __________________
Homo homini penis est. |
27.01.2015 / 23:33 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| Kalter, public static ArrayList<Integer> keychain = new ArrayList<>(1); //Pressed buttons will be stored here.
public static boolean keyPressed(int key) {
return (keychain.contains(key));
}
public static void pressKey(int key) {
if (!keyPressed(key)) keychain.add(key);
}
public static void resetKey(int key) {
if (keyPressed(key)) keychain.remove(keychain.indexOf(key));
}
public static void resetKeys() {
keychain.clear();
}
|
27.01.2015 / 23:53 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| DominaN, выглядит прилично, и связка с кнопочным листенером хорошая. Спасибо.
__________________
Homo homini penis est. |