さらに調べてみたら、DirectInputでもキーマッピングを自分で作れば、GameMakerが持っているXInput対応の関数でキー動作を取得できました。
サンプルと同じ様に処理したいときは、マッピングを自分で作るといいかもしれません。
とりあえずJC-U3613Mだけ動けばいいなら以下のようにすると動きました。
var mapping = gamepad_get_guid(pad_id) + "," + gamepad_get_description(pad_id);
mapping += ",platform:windows,";
mapping += "a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,";
gamepad_test_mapping(pad_id, mapping);
キーマップ指示用文字列を作って、「gamepad_test_mapping」でそれを適用するという流れです。
プログラムを動かすとmappingに入っているキーマップ文字列は以下のようになりました。
6e050320000000000000504944564944,JC-U3613M - DirectInput Mode,platform:Windows,a:b2,b:b3,x:b0,y:b1,leftshoulder:b4,rightshoulder:b5,lefttrigger:b6,righttrigger:b7,guide:b10,start:b11,leftstick:b8,rightstick:b9,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,back:b10,
キーマッピングは以下のヘルプで説明されていました。
https://manual.yoyogames.com/GameMaker_Language/GML_Reference/Game_Input/GamePad_Input/gamepad_test_mapping.htm
どうしてもDirectInputのコントローラーで対応したいなら、キー設定画面などを作って、ユーザーの設定をmappinng文字列に直してgamepad_test_mappingに渡してあげるようにすれば、どのようなコントローラーでも対応できそうです。
通報 ...
ありがとうございます!色々出来そうですね!