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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2006, 12:12   #1
Flash_
Пользователь
 
Аватар для Flash_
 
Регистрация: 19.12.2006
Сообщений: 91
По умолчанию Обработчик события...

Извиняюсь за ламерский вопрос, но тем не менее...)
Как создать процедуру для обработки какого-либо события при нажатии СТРЕЛОК на клавиатуре? А то буквами управлять как-то не очень удобно.. Подскажите, плз.
Flash_ вне форума Ответить с цитированием
Старый 20.12.2006, 12:40   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Это события OnKeyDown, OnKeyUp. Но не OnKeyPress!!!
Опознавание значения KEY:
например, стрелка "вверх" - if key=VK_UP then...

Посмотри в хэлпе "virtualkeycodes", там приведены коды всех служебных клавиш.
mihali4 вне форума Ответить с цитированием
Старый 20.12.2006, 12:59   #3
Flash_
Пользователь
 
Аватар для Flash_
 
Регистрация: 19.12.2006
Сообщений: 91
По умолчанию

Спасибо. Именно вот это VK_UP и надо было.)
Flash_ вне форума Ответить с цитированием
Старый 20.12.2006, 16:28   #4
Flash_
Пользователь
 
Аватар для Flash_
 
Регистрация: 19.12.2006
Сообщений: 91
По умолчанию

Кстати, а почему OnKeyPress использовать нельзя?
Flash_ вне форума Ответить с цитированием
Старый 20.12.2006, 19:45   #5
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
Сообщение от Flash_ Посмотреть сообщение
Кстати, а почему OnKeyPress использовать нельзя?
Там другой тип обозначения клавиш... Кароче VK_UP, VK_Left... там не прокатит.
zetrix вне форума Ответить с цитированием
Старый 20.12.2006, 19:52   #6
Flash_
Пользователь
 
Аватар для Flash_
 
Регистрация: 19.12.2006
Сообщений: 91
По умолчанию

Ясно. Буду знать=)
Flash_ вне форума Ответить с цитированием
Старый 27.12.2006, 02:41   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Flash_ Посмотреть сообщение
Ясно. Буду знать=)
Просто посмотри, какой тип имеет входная переменная KEY в событии ONKEYPRESS и в событиях ONKEYUP/DOWN. Именно поэтому ONKEYPRESS просто не умеет обрабатывать ничего, кроме символов.
mihali4 вне форума Ответить с цитированием
Старый 22.01.2007, 20:02   #8
Cezar
Средний прогер
Форумчанин
 
Аватар для Cezar
 
Регистрация: 16.01.2007
Сообщений: 123
По умолчанию

Я могу посоветовать свой метод:
Создаеш четыре переменные (MoveUp,MoveDown,MoveLeft,MoveRight );
Пишеш в событии OnKeyDown:
Цитата:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case key of
VK_UP:
begin
Moveup:=true;
end;
VK_DOWN:
begin
Movedown:=true;
end;
VK_LEFT:
begin
Moveleft:=true;
end;
VK_RIGHT:
begin
Moveright:=true;
end;
end;
end;
Пищещ в событии OnKeyUp:

Цитата:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case key of
VK_UP:
begin
Moveup:=false;
end;
VK_DOWN:
begin
Movedown:=false;
end;
VK_LEFT:
begin
Moveleft:=false;
end;
VK_RIGHT:
begin
Moveright:=false;
end;
end;
end;
Создаеш таймер со значением Interval 10 (смотря чем управлять) и пишеш в него:
Цитата:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Moveup then player.Top:=player.Top-speed;
if Movedown then player.Top:=player.Top+speed;
if Moveleft then player.Left:=player.Left-speed;
if Moveright then player.Left:=player.Left+speed;
end;
После Then пиши то, что должно случатся при нажатии на соответствующие клавиши.


Может, такой метод давно существует, но до этого я сам додумался. Я этим методом постоянно пользуюсь, и всем вам советую. Налицо преимущества.

ЗЫ. Подходит?

Последний раз редактировалось Cezar; 22.01.2007 в 20:04. Причина: Опечатка
Cezar вне форума Ответить с цитированием
Старый 03.03.2007, 10:10   #9
Dimos33
Joung Programmer
 
Аватар для Dimos33
 
Регистрация: 25.02.2007
Сообщений: 6
Хорошо

Спасиб за информацию о Moveleft и т.п., и за speed
Dimos33 вне форума Ответить с цитированием
Старый 11.03.2007, 16:05   #10
LepihinMS
Пользователь
 
Регистрация: 03.02.2007
Сообщений: 45
По умолчанию

Рассмотрим ситуацию жму на W, потом не отпуская W жму на D и компу уже наплевать что W нажата. Что делать если надо отслеживать нажатие 2х-3х клавишь одновременно?

Вот код который сейчас использую:

Цитата:
procedure TForm1.GLFSKeyPress(Sender: TObject; var Key: Char);
begin
if (key='w')or(key='ц') then Speed:=Speed+0.1;
if (key='s')or(key='ы') then Speed:=Speed-0.1;
if (speed<>0)and((key='a')or(key='ф')) then PL:=true;
if (speed<>0)and((key='d')or(key='в')) then PP:=true;
end;
LepihinMS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработчик ошибок XPAiN Microsoft Office Excel 3 21.04.2008 09:30
Динамический обработчик события SKYDOS Помощь студентам 2 11.04.2008 06:46
Обработчик ошибок. Dj_smart Общие вопросы Delphi 17 30.03.2008 11:58
обработчик событий ben95 Помощь студентам 5 28.01.2008 17:46
Как и в какой момент написать обработчик события если БД не доступна Arteom БД в Delphi 8 04.10.2007 12:08