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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2007, 02:02   #1
frai
Пользователь
 
Регистрация: 11.04.2007
Сообщений: 36
По умолчанию HELP!!! как обрабатать только 2 нажатия в 1 момент времени.

Столкнулся вот с такой проблемой - в игре есть 2 объекта и 2 обработчика событий KeyDown. Нажатие кнопок завязано не на самих объектах а обрабатываются самой формой. Проблема заключается в том,что по игре часто необходимо в 1 момен времени перемещать эти объекты а форма обрабатывает только 1 нажатие в 1 момент времени, в результате если 1-ый объект в движении то 2-ой парализован.
Что сможите посоветовать? Если 1 объект регулируетя клавишами символьной клавиатуры а 2-ой цифровой то проблема исчезет?
frai вне форума Ответить с цитированием
Старый 15.04.2007, 06:56   #2
bphoenix
Пользователь
 
Аватар для bphoenix
 
Регистрация: 12.04.2007
Сообщений: 21
По умолчанию

я бы посоветовал сделать так:
завести массив Keys : array[ 0..255 ] of Boolean;

в OnKeyDown написать Keys[ Key ] := True;
в OnKeyUp: Keys[ Key ] := False;

в главном цикле (наверное он у тебя в OnTimer находится) написать:
if Keys[ VK_NUMPAD8 ] then <двигаешь объект№1 вверх>;
if Keys[ Byte('W') ] then <двигаешь объект№2 вверх>;
итд.
работает прекрасно
Пусть баги обходят вас стороной
bphoenix вне форума Ответить с цитированием
Старый 15.04.2007, 13:29   #3
Voland
Heavy metal
Пользователь
 
Аватар для Voland
 
Регистрация: 02.04.2007
Сообщений: 42
По умолчанию

Лучше используй GetAsyncKeyState в главном цикле.
Voland вне форума Ответить с цитированием
Старый 15.04.2007, 23:23   #4
frai
Пользователь
 
Регистрация: 11.04.2007
Сообщений: 36
По умолчанию

напиши пожалуйста поподробней об этой процедуре. как мне ее применить по отношению к движению 2-х объектов bitbtn
frai вне форума Ответить с цитированием
Старый 16.04.2007, 16:10   #5
Voland
Heavy metal
Пользователь
 
Аватар для Voland
 
Регистрация: 02.04.2007
Сообщений: 42
По умолчанию

Ну что-то вроде этого: (написал на скорую руку, сам не проверял)
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (GetAsyncKeyState(VK_LEFT) and (1 shl 15)) <> 0 then BitBtn1.Left:=BitBtn1.Left + 1;
  ...
  if (GetAsyncKeyState(Ord('A')) and (1 shl 15)) <> 0 then BitBtn2.Left:=BitBtn2.Left + 1;
  ... //ну и дальше в том же духе
end;

Последний раз редактировалось Voland; 16.04.2007 в 21:19.
Voland вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опредиление времени нажатия клавиши Antonio86 Общие вопросы Delphi 1 29.04.2008 20:48
Пытаюсь выйти в инет с компа через мобилу, в момент соединения комп начинает виснуть Sava Свободное общение 5 29.04.2008 18:02
начал учить только-только - нужна ваша помошь vanDJ Помощь студентам 20 18.12.2007 21:53
Как определить момент запуска сторонней программы? NioTo Win Api 2 17.12.2007 16:40
Как и в какой момент написать обработчик события если БД не доступна Arteom БД в Delphi 8 04.10.2007 12:08