Mam's WebSite

Mamの覚書Q&A検索


大項目:「 Delphi 」 - 中項目:「 API 」

「 キーボードのキーが押されているか、ジョイスティックのキーが押されているか等、キーの状態を確認するには 」

シューティングゲーム等でキーボードのキーが押されているかキーの状態を確認するには。
また、ジョイスティックのスティックの状態やキーが押されているかを確認するには。


回答

キーボードのキーの状態を調べるにはGetKeyState APIを使用します。
ジョイスティックの状態を調べるには
Uses に Winapi.MMSystem を追加して joyGetPos API又は joyGetPosEx APIを使用します。

ソース

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
  Winapi.MMSystem;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var joyres:Cardinal;
    JoyInfo: TJOYINFO; //ジョイスティック状態確認用
begin
  if ((GetKeyState( VK_UP )    and $8000) <> 0) then
    Label1.Caption:='上↑';
  if ((GetKeyState( VK_DOWN )  and $8000) <> 0) then
    Label1.Caption:='下↓';
  if ((GetKeyState( VK_LEFT )  and $8000) <> 0) then
    Label1.Caption:='左←';
  if ((GetKeyState( VK_RIGHT ) and $8000) <> 0) then
    Label1.Caption:='右→';
 
  joyres:=joyGetPos(JOYSTICKID1, @JoyInfo);//ジョイスティック1
  if (joyres=MMSYSERR_NOERROR) then
  begin
    Label2.Caption:=
      format(
        'X=%d,Y=%d,Buttons=%d',
        [JoyInfo.wXpos,JoyInfo.wYpos,JoyInfo.wButtons]);
  end;
  joyres:=joyGetPos(JOYSTICKID2, @JoyInfo);//ジョイスティック2
  if (joyres=MMSYSERR_NOERROR) then
  begin
    Label3.Caption:=
      format(
        'X=%d,Y=%d,Buttons=%d',
        [JoyInfo.wXpos,JoyInfo.wYpos,JoyInfo.wButtons]);
  end;
end;

Copyright 2019 Mam