Проблема при использовании KeyboardState
|
|
LExxEL | Дата: Понедельник, 20 Января 2014, 10:00 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Здравствуйте. Пишу игру и в процессе ее написания столкнулся с проблемой, с которой не ожидал столкнуться. Проблема состоит в том, что когда я нажимаю кнопку на клавиатуре (в данном случае пробел), событие описанное в теле условия повторяется с большой скоростью. То есть, я нажал на кнопку, и это событие будет выполняться, пока я не уберу палец с кнопки. Мне же нужно, чтобы условие повторялось одинарно. Возможно я туплю, и решение "плавает" на поверхности, но все же прошу помощи. Вот часть "проблемного" кода (здесь я ничего не менял):
Код state = Keyboard.GetState();
if (state.IsKeyDown(Keys.Space)) items[currItem].OnClick();
Сообщение отредактировал LExxEL - Понедельник, 20 Января 2014, 10:02 |
|
| |
Archido | Дата: Понедельник, 20 Января 2014, 10:11 | Сообщение # 2 |
Сэнсэй
Сейчас нет на сайте
| Если это XNA, то там было нечто вроде "IsKeyPress"
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
LExxEL | Дата: Понедельник, 20 Января 2014, 10:19 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Цитата Archido ( ) Если это XNA, то там было нечто вроде "IsKeyPress" Насколько я знаю, то IsKeyPress тут нет. Есть только IsKeyDown и IsKeyUp
|
|
| |
Archido | Дата: Понедельник, 20 Января 2014, 10:27 | Сообщение # 4 |
Сэнсэй
Сейчас нет на сайте
| Ну, тогда можно добавить некий глобальный "oldState" и сделать что-то вроде этого:
Код state = Keyboard.GetState();
if (state.IsKeyDown(Keys.Space) && oldState.IsKeyUp(Keys.Space)) { items[currItem].OnClick(); } oldState = state;
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
LExxEL | Дата: Понедельник, 20 Января 2014, 10:34 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Archido, Я уже пробовал этот вариант, но все равно не выходит
Сообщение отредактировал LExxEL - Понедельник, 20 Января 2014, 10:35 |
|
| |
Archido | Дата: Понедельник, 20 Января 2014, 10:40 | Сообщение # 6 |
Сэнсэй
Сейчас нет на сайте
| Покажи где oldState объявляешь.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
LExxEL | Дата: Понедельник, 20 Января 2014, 11:00 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| у меня oldState - глобальная переменная и она меняет свое значение также, как и в твоем варианте - в конце метода Update Код public void Update() { state = Keyboard.GetState();
if (state.IsKeyDown(Keys.Space) && oldState.IsKeyUp(Keys.Space)) s_items[currItem].OnClick();
int delta = 0; if (state.IsKeyDown(Keys.Up) && oldState.IsKeyUp(Keys.Up)) delta = -1;
if (state.IsKeyDown(Keys.Down) && oldState.IsKeyUp(Keys.Down)) delta = 1;
currItem += delta; bool ok = false; while (!ok) { if (currItem < 0) currItem = s_items.Count - 1; else if (currItem > s_items.Count - 1) currItem = 0; else if (s_items[currItem].active == false) currItem += delta; else ok = true; } oldState = state; } Добавлено (20.01.2014, 11:00) --------------------------------------------- Archido, Ооо, я прозрел Я нашел способ все исправить! Благодарю
Сообщение отредактировал LExxEL - Понедельник, 20 Января 2014, 10:50 |
|
| |