Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2012, 18:16   #1
Sargonass
Пользователь
 
Аватар для Sargonass
 
Регистрация: 21.09.2011
Сообщений: 35
По умолчанию Зацикливание при нажатии клавиши в DirectInput

Создал утройство клавиатуры. Теперь надо чтобы при нажатии клавиши у определенной переменной считывалось ее значение и присваивалось другое.
Но почему то пока нажата клавиша то происходит зацикливание этого нажатия, можно ли как-нибудь сделать чтобы при нажатии клавиши событие срабатывало только 1 раз?

Код нажатия клавиши:

private void ReadKeyboard()
{
Microsoft.DirectX.DirectInput.Keybo ardState keys = keyb.GetCurrentKeyboardState();
if (keys[Microsoft.DirectX.DirectInput.Key.E])
{
if (Blocked == false)
Blocked = true;
else
Blocked = false;
}
}
Sargonass вне форума Ответить с цитированием
Старый 14.01.2012, 19:28   #2
VmanMaslov
Форумчанин
 
Аватар для VmanMaslov
 
Регистрация: 12.06.2011
Сообщений: 115
По умолчанию

Не учил ДиректИкс, но там должна быть ф-ция типа kbhit() в С++. Тогда будет так:
Код:
while(1)
{
     if(kbhit()) { Keys() } // Проверка какая клавиша нажата 1 раз в цикле
}
Men do it in ASCII!
VmanMaslov вне форума Ответить с цитированием
Старый 14.01.2012, 19:42   #3
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Считаю что такие вещи нужно уметь решать самостоятельно и не просить помощи.
Самое простое решение, это запоминать что клавиша была нажата или отпущена.
Код:
if (keys[Microsoft.DirectX.DirectInput.Key.E])
{
  if(!lastEhit){
    if (Blocked == false)
      Blocked = true;
    else
      Blocked = false;
  }
  lastEhit = true;
}else lastEhit = false;
НО!!! Есть способ гораздо лучше!!!
Kostia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие при нажатии клавиши. werrey Общие вопросы Delphi 3 09.06.2011 21:33
Как в C# прервать работу цикла при нажатии клавиши xata1988 Общие вопросы .NET 5 14.02.2011 14:48
Закрытие окна при нажатии опр. клавиши на клавиатуре. Borgond Общие вопросы Delphi 6 25.08.2010 01:14
завершение цикла при нажатии клавиши LLIyPI/IK Общие вопросы C/C++ 8 12.02.2010 13:29
Событие при нажатии клавиши Enter Inbox Общие вопросы Delphi 4 12.06.2007 14:18