Четверг, 19 Декабря 2024, 11:50

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема при использовании 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, Ооо, я прозрел smile Я нашел способ все исправить! Благодарю

Сообщение отредактировал LExxEL - Понедельник, 20 Января 2014, 10:50
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг