Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Нажатие клавиши в XNA

Ответить
Настройки темы
.NET - Нажатие клавиши в XNA

Старожил


Сообщения: 160
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как я понял, в XNA нету обработчика события нажатия клавиши, а задача в том чтобы заданый код выполнялся один раз при нажатии клавиши.
Например если так
Код: Выделить весь код
if (Keyboard.GetState().IsKeyDown(Keys.L) && !click_l)
   i++;
То переменная i увеличится не на +1, а примерно на время залипания клавиши в милисекундах, но как правильным путем добиться нужного результата?
Если
Код: Выделить весь код
bool click = false; /// Вне метода
/////////////////////////

  if (Keyboard.GetState().IsKeyDown(Keys.L) && !click)
   {
       click = true;

    ////Код который нужно выполнить, например i++;
   
   }
   if (Keyboard.GetState().IsKeyUp(Keys.L)) click = false;
Здесь все работает, а именно при нажатии клавиши i увеличится всего лишь на +1, и так при "едином" надатии.
Но меня волнует то, что в таком случае будет много лишнего кода, и для каждой кнопки делать так будет неправильно. Попытка засунуть этот код в метод не дала результата, так как опять же для коректной работы нужно было для каждого вызова метода объявлять переменную которая отвечала за нажатие. Даже создание отдельного класса и написании переменной как член класса не дало результата.

Отправлено: 00:21, 15-10-2012

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Сделайте сами обработчик IsKeyPressed

Создаете класс, там два массива bool Keys[256], OldKeys[256].

Сперва все false, при нажатии кнопки один элемент в массиве Keys становится true, OldKeys=Keys

и на следующем заходе сравниваете, если Keys[i]!=OldKeys[i] значит кнопка была нажата или отпущена

Отправлено: 05:38, 15-10-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я, конечно, понимаю, что лет так на 6 опоздал, но всё же.

Код: Выделить весь код
long escape_key_down = 0; // Вне метода
///////////////////////

if (Keyboard.GetState().IsKeyDown(Keys.Escape))
                escape_key_down++;
if (Keyboard.GetState().IsKeyUp(Keys.Escape) && escape_key_down > 0)
{
                
                // TODO: здесь код, который должен был выполняться по нажатию Esc.

                escape_key_down = 0;
}
Мало ли кому пригодится, ибо с bool'ом это дело не работает.

Последний раз редактировалось a1i1uyamax, 23-05-2018 в 07:30. Причина: Небольшое исправление.


Отправлено: 07:10, 23-05-2018 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Нажатие клавиши в XNA

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Передать нажатие клавиши в неактивное окно HFShak AutoIt 1 05-09-2012 22:54
Свернуть удаленный рабочий стол и передать нажатие клавиши zuzu AutoIt 0 24-08-2012 17:51
Нажатие на ссылку wolkow70 AutoIt 3 30-04-2012 19:01
CMD/BAT - Нажатие клавиши F5 через батник или cmd. usbdrive Скриптовые языки администрирования Windows 1 22-10-2011 01:33
Разное - Тачпад не реагирует на хлопки, как на нажатие левой клавиши мыши Pasha219 Ноутбуки 1 24-03-2010 17:27




 
Переход