Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.05.2008, 21:40
TKost TKost вне форума
Прохожий
 
Регистрация: 17.05.2008
Сообщения: 6
Репутация: 10
По умолчанию Клавиши

Создаю игру, как можно отловить нажать двух клавиш: к примеру стрлки вверх и влево (vk_up и vk_vk_left)? К примеру в процедуре FormKeyDown это возможно?
Ответить с цитированием
  #2  
Старый 18.05.2008, 22:11
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Возможно, но сложно. Надо понимать, что иллюзия нажатия одновременно двух клавиш и есть иллюзия. На самом деле приходят два последовательных события, сначала от одной, затем от другой клавиши.
Поэтому надо извращаться. Отловить нажатие одной клавиши в событии OnKeyDown и запомнить это обстоятельство в каком-нибудь булевском флаге. В событии OnKeyUp отслеживать, а не отпущена ли эта клавиша (если отпущена - флаг сбрасывать). Затем отлавливать нажатие другой клавиши в OnKeyDown и смотреть флаг нажатия первой клавиши.
Если флаг первой клавиши не сброшен, то первая клавиша нажата и, таким образом нажаты обе клавиши. По этому условию что-то делать.
Если это происходит на форме, то свойство KeyPreview должно быть установлено в True;
Ответить с цитированием
  #3  
Старый 18.05.2008, 22:42
Ozerich Ozerich вне форума
Новичок
 
Регистрация: 11.04.2008
Адрес: В городе-герой Минск
Сообщения: 69
Репутация: 10
По умолчанию

А ты не пробовал это сделать с помощью хуков?
Ответить с цитированием
  #4  
Старый 18.05.2008, 22:52
TKost TKost вне форума
Прохожий
 
Регистрация: 17.05.2008
Сообщения: 6
Репутация: 10
По умолчанию

Спасибо за идейки, щас попробуем =)
Ответить с цитированием
  #5  
Старый 20.05.2008, 11:10
Гудвин Гудвин вне форума
Прохожий
 
Регистрация: 18.03.2008
Сообщения: 24
Репутация: 10
По умолчанию

создаёшь булевый массив для интересующих тебя клавиш, что будет хранить инфу нажата клавиша или нет. потом пишешь стандартную процедуру перехвата сообщений нажатия клавиш примеров тьма. там в аргументе есть код нажатой клавиши, по нему меняешь значения массива.
Ответить с цитированием
  #6  
Старый 21.05.2008, 23:52
TKost TKost вне форума
Прохожий
 
Регистрация: 17.05.2008
Сообщения: 6
Репутация: 10
По умолчанию

Есть еще одна проблемка по обработке клавиш в процедуре onkeydown если зажимать клавишу, то компонент timer работает не корректно... т.е. невыполняет заданное условие через определенный промежуток (пропускает некоторые циклы) времени, если зажата клавиша.
Ответить с цитированием
  #7  
Старый 22.05.2008, 10:46
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

TTimer не точный счетчик потому что VCL :-).
Для точного измерения лучше использовать WinAPI: SetTimer - KillTimer.
Ответить с цитированием
  #8  
Старый 22.05.2008, 12:04
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Цитата:
Сообщение от TKost
Есть еще одна проблемка по обработке клавиш в процедуре onkeydown если зажимать клавишу, то компонент timer работает не корректно... т.е. невыполняет заданное условие через определенный промежуток (пропускает некоторые циклы) времени, если зажата клавиша.
Не забудьте учесть, что если клавиша зажата, то через секунду-другую клавиатура начинает посылать события нажатия примерно 10 раз в секунду.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter