Реклама:

Пусть вас не смущает название — там не только о клавиатуре. Подключите его в uses модуля, в котором будете обрабатывать сообщения от устройств. Давайте посмотрим, какие возможности дает модуль.

Клавиатура

Чтобы определить, нажата ли какая-то клавиша в данный момент времени, используйте функцию isKeyDown, например:

If IsKeyDown (VK_UP) then Tank.Go(deltaTime)

Клавишу для проверки надо задавать, используя виртуальный код. Полный список виртуальных кодов клавиш вы найдете в справке Delphi.

Еще одна полезная пара функций из этого модуля: KeyName-ToVirtualKeyCode и VirtualKeyCodeToKeyName. Они конвертируют виртуальный код клавиши в символьное имя, принятое в системе, и наоборот. Эти функции пригодятся, когда вы будете делать переназначение клавиш. Игрок должен иметь возможность переназначить управление по своему вкусу. Реализовать это можно разными способами.

Мышь

Здесь нам надо решить две задачи: обработка нажатий кнопок мыши и отслеживание положения указателя мыши (курсора или прицела). Первая задача решается очень просто — с помощью все того же IsKeyDown. Коды левой, средней и правой клавиши мыши соответственно VK_LBUTTON, VK_MBUTTON И VK_RBUTTON. Вторая задача не намного сложнее. Сперва объявите в var нужного обработчика вот такую переменную.

р:TPoint;

В TPoint. X и TPoint. Y мы будем сохранять горизонтальную и вертикальную координаты мыши. Теперь с помощью команды Get-Cur sorPos из WinAPI можно легко получить искомые координаты, getcursoxpos(р);

На практике часто важно знать не координаты мыши, а изменение координат после предыдущей проверки. Для этого объявите глобальные переменные.

шх, rtiy,dx,dy : Integer;

А теперь в том же коде сразу после вызова GetCursorPos напишите:

dx:=p.X-mx; dy: =р. Y-my;

Вот наглядный пример того, как эти изменения координат можно использовать:

Player.Weapon.Moveüp(dx) ; Player.Weapon.MoveLeft(dy);

Естественно, если dx отрицательный, MoveUp вопреки названию не поднимет оружие, а опустит. То же относится и к Move-Left. Объекты Player и Weapon здесь просто придуманы, для движка они ничего не значат. Более подробно о том, как правильно организовать иерархию классов движка, мы поговорим в разделе "Программирование игры на основе движка — GLScene: иерархия классов и объектов" этой главы.

Джойстик

Давайте условимся, что за джойстики у нас с вами сойдут любые устройства, имеющие некоторое количество кнопок и некоторое количество рычажков с некоторым количеством степеней свободы. С точки зрения программирования геймпады, рули, педали и прочие подобные "девайсы" ничем от джойстиков не отличаются.

Для работы с джойстиками в GLScene есть специальный компонент TJoystick. Перед употреблением настройте его свойство Threshold (порог чувствительности), а свойству NoCaptureError присвойте true, иначе, в случае если джойстик в системе не установлен, будет выдаваться ошибка. Перед началом работы присвойте свойству Capture значение true и можете снимать данные. За отклонение главной "палки" джойстика отвечают свойства TJoystick.XPosition и TJoystick. YPosition. Если эти свойства равны нулю, отклонения джойстика нет. Положительное значение свойства соответствует отклонению вверх или вправо, отрицательное— вниз или влево, а само значение пропорционально углу отклонения. Все нажатые в данный момент клавиши джойстика автоматически заносятся в набор JoyButtons. С этим типом данных вы еще не встречались. Определить, содержится ли элемент в наборе, можно таким образом:


⇐ Предыдущая страница| |Следующая страница ⇒