Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
В этой статье мы рассмотрим методы управления объектами в играх с помощью клавиатуры, мыши и джойстика..
1. Клавиатура.Опрос нажатия клавиши ведется через DXInput.States:
if<тикер> in
DXInput.States then begin
//действие end
,где
Для сравнения два равноценных условия:
//c использования DXInput ifisUp in
DXInput.States then begin
//действие end
//а это - без if
Key=VK_UP then begin
//действие end
Чтобы определить "тикер": DXInput.Keyboard.KeyAssigns[<тикер>,X]:= <кнопка> ,где:
Примечание: буквенные клавиши указываются в верхнем регистре, т.е.
DXInput.Keyboard.KeyAssigns[isButton10,X]:=ord('q')
не будет реагировать на нажатие клавиши 'q' .
Кнопки Ctrl, Alt, Shift можно опросить обычным способом:
If(ssCtrl in
Shift) then
... If
(ssAlt in
Shift) then
... If
(ssShift in
Shift) then
...
Небольшой примерчик. Зарекрепим за тикером isUp - кнопки "E","I" и "стрелка вверх":
procedureTForm1.DXTimerTimer(Sender: TObject; LagCount: Integer); begin if not
DXDraw.CanDraw then
exit; //обновим состояние DXInput (нужно делать при каждом тике таймера) DXInput.Update; DXDraw.Surface.Fill(0); If
isUP in
DXInput.States then With
DXDraw.Surface.Canvas do begin
Brush.Style := bsClear; Font.Color := clWhite; Font.Size := 12; TextOut(50,50,'UP pressed'); Release; end
; DXDraw.Flip; end
; procedure
TForm1.FormCreate(Sender: TObject); begin
DXInput.Keyboard.KeyAssigns[isUp,0]:=ord('E'); //за [isUp,1] - по умолчанию зарезервирована "стрелка вверх", оставим ее. DXInput.Keyboard.KeyAssigns[isUp,2]:=ord('I'); end
;
2. Мышь
DXinput.Mouse.X - положение курсора по горизонтали
DXinput.Mouse.Y - положение курсора по вертикали
DXinput.Mouse.Z - положение курсора по третьей оси
Небольшой примерчик:
varForm1: TForm1; MouseX,MouseY:integer; LeftB,RightB:boolean; implementation
{$R *.DFM} procedure
TForm1.DXTimerTimer(Sender: TObject; LagCount: Integer); var
Shift: TShiftState; begin if not
DXDraw.CanDraw then
exit; DXInput.Update; DXDraw.Surface.Fill(0); With
DXDraw.Surface.Canvas do begin
Brush.Style := bsClear; Font.Color := clWhite; Font.Size := 12; If
LeftB then
TextOut(0,0,'Left'); If
RightB then
TextOut(50,0,'Right'); TextOut(0,50,IntToStr(MouseX)+','+IntToStr(MouseY)); Release; end
; DXDraw.Flip; end
; procedure
TForm1.DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin
MouseX:=X; MouseY:=Y; end
; procedure
TForm1.DXDrawMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin If
ssLeft in
Shift then
LeftB:=true; If
ssRight in
Shift then
RightB:=true; end
; procedure
TForm1.DXDrawMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin
LeftB:=false; RightB:=false; end
;
3. Джойстик
Настроим джойстик:
DXinput.Joystick.RangeX = 0 - 1000, устанавливает диапазон изменения значений по
горизонтальной оси от X до -X
DXinput.Joystick.RangeY = 0 - 1000, устанавливает диапазон изменения значений по
вертикальной оси от Y до -Y
DXinput.Joystick.RangeZ = 0 - 1000, устанавливает диапазон изменения значений по
третьей оси от Z до -Z
DXinput.Joystick.DeadzoneX = 0 - 100, устанавливает чувствительность по
горизонтальной оси
DXinput.Joystick.DeadzoneY = 0 - 100, устанавливает чувствительность по
вертикальной оси
DXinput.Joystick.DeadzoneZ = 0 - 100, устанавливает чувствительность по третьей
оси
0 - самое чувствительное значение.
Читаем положение рукоятки:
DXinput.Joystick.X - по горизонтальной оси
DXinput.Joystick.Y - по вертикальной оси
DXinput.Joystick.Z - по третьей оси
Z - используется в случае наличия на джойстике соответствующей ручки. Этот кусок
кода сканирует кнопки на джойстике:
fori := 0 to
DXInput1.Joystick.ButtonCount do begin if
DXInput1.Joystick.Buttons[i] = True then begin
//Кнопка нажата. Действие. end
; end
;
Примечание: Руль можно считать частным случаем джойстика. При этом штурвал - горизонтальная ось (X), педаль газа и педаль тормоза - вертикальная ось (Y).