JspadStick

ゲームパッドのキー入力をstick命令に寄せて取得

JspadStick p1,p2,p3

p1=変数 : 読み込むための変数
p2=0〜(0) : 非トリガータイプキー指定
p3=0〜3(0) : 移動キーオプション

(プラグイン / モジュール : mod_dish-js-gamepad)

解説

# HSP3Dish.jsでのみ動作します。

ゲームパッドの複数のボタン状況を1つの数値として、p1で指定した変数に代入します。

ゲームパッドのボタン情報をstick命令と互換性を持たせるように割り当て直しています。
JspadGetButtons()とは取得した際のボタン入力数値が異なるので注意してください。

値(10進) 値(16進) PC(stick命令) ゲームパッド
1 $00001 カーソルキー左(←) LEFTボタン
2 $00002 カーソルキー上(↑) UPボタン
4 $00004 カーソルキー右(→) RIGHTボタン
8 $00008 カーソルキー下(↓) DOWNボタン
16 $00010 スペースキー 東ボタン: A(N)、○(DS4)、B(MS)
32 $00020 Enterキー PLUSボタン(OPTIONS,MENU)
64 $00040 Ctrlキー 南ボタン: B(N)、×(DS4)、A(MS)
128 $00080 ESCキー MINUSボタン(SHARE,VIEW)
256 $00100 マウスの左ボタン ZRボタン(R2,RT)
512 $00200 マウスの右ボタン ZLボタン(L2,LT)
1024 $00400 TABキー Lボタン(L1,LB)
2048 $00800 [Z]キー 西ボタン: Y(N)、□(DS4)、X(MS)
4096 $01000 [X]キー 北ボタン: X(N)、△(DS4)、Y(MS)
8192 $02000 [C]キー Rボタン
16384 $04000 [A]キー Lスティック-左倒し
32768 $08000 [W]キー Lスティック-上倒し
65536 $10000 [D]キー Lスティック-右倒し
131072 $20000 [S]キー Lスティック-下倒し
16777216 $01000000 --- Lスティック押し込み
33554432 $02000000 --- Rスティック押し込み
67108864 $04000000 --- HOMEボタン(PS)
(Nintendo Switch系のコントローラを念頭にテキトーにキー割り当てをしていますが、モジュール内の命令をカスタマイズして使って頂ければと思います。)

何もボタンが押されていない場合には0が代入されます。
もし複数のボタンが同時に押されていた場合には、それらの数値がすべて加算されます。

Lスティックによる移動はスティックを50%以上倒したときに初めて検出されるので注意してください。
倒し始めてすぐ検出したい場合は JspadGetLeftX, JspadGetLeftY を使用してください。

stick命令と同じようにボタンが押された瞬間だけを検出します。つまり、ボタンが押された時に1度だけ押されている情報を返し、あとは押されているボタンをはなすまでは、押されていることになりません。

ただし、p2の非トリガータイプキー指定により、押しっぱなしであっても情報を検出することができるようになります。

p2に押しっぱなしでも検出されるキーのコード(上の表にあるコードです。 複数の場合はそれぞれの数値を加えます)を指定すると、 そのキーだけはボタンが押されている間ずっと検出されるようになります。

また、stick命令と互換性があるのでstick命令でキー情報を取得した変数に、JspadStickで取得した変数情報を重ね合わせるとキーボードとゲームパッド両方に対応した条件分岐を行うことができます。

例 :
	stick a, 0           ; 変数aにキー状態を読み出し
	JspadStick b, 0      ; 変数bにゲームパッド状態を読み出し
	a |= b               ; ゲームパッドのボタン状態をstickのキー状態に被せ合わせる
	if a&16 : goto *spc  ; スペースまたは南ボタン[B(N)、×(DS4)、A(MS)]が押されたか?
	if a&32 : goto *ent  ; EnterまたはPLUSボタン(OPTIONS,MENU)が押されたか?

p3オプションを使うとゲームパッドの上下左右ボタンまたはLスティックによる移動を、stick命令の上下左右キーとWASDキーのどちらに対応させるかを変更することができます。
ゲームパッド p3オプション 上下左右ボタン Lスティック
stick命令 0 上下左右キー WASDキー
1 WASDキー 上下左右キー
2 上下左右キー 上下左右キー
3 WASDキー WASDキー

サンプル

#include "hsp3dish.as"

#include "mod_dish-js-gamepad.hsp"

x=ginfo_sx/2 : y=ginfo_sy/2
*main
	redraw 0
	color 255,255,255:boxf:color:pos 0,0
	
	stick stk, $3C00F         ; 上下左右,WASDキーを非トリガー設定
	JspadStick jspstk, $3C00F ; 上下左右ボタン,Lスティック移動を非トリガー設定
	stk |= jspstk             ; ゲームパッドのボタン状態をstickのキー状態に被せ合わせる

	if stk&$00080 : end  ; stick:Esc または pad:MINUSボタン(SHARE,VIEW)で終了
	if (stk&$1)!0 || (stk&$04000)!0 : x -= 5  ; stick:左,Aキー または pad:左,Lスティック左
	if (stk&$2)!0 || (stk&$08000)!0 : y -= 5  ; stick:上,Wキー または pad:上,Lスティック上
	if (stk&$4)!0 || (stk&$10000)!0 : x += 5  ; stick:右,Dキー または pad:右,Lスティック右
	if (stk&$8)!0 || (stk&$20000)!0 : y += 5  ; stick:下,Sキー または pad:下,Lスティック下

	mes "JspadGetID=" + JspadGetID()
	mes "JspadGetButtons=" + JspadGetButtons()
	mes "JspadGetLeft=" + strf("(%f,%f)",JspadGetLeftX(),JspadGetLeftY())
	pos x,y : mes "●"
	redraw 1
	await (1000 / 60)
goto *main

関連項目

JspadEnableゲームパッドが使用できる状態か取得(mod_dish-js-gamepad)
JspadGetID接続しているゲームパッドのID文字列を取得(mod_dish-js-gamepad)
JspadButtonsNum接続されているゲームパッドのボタン数を取得(mod_dish-js-gamepad)
JspadAxesNum接続されているゲームパッドのアナログスティック入力数を取得(mod_dish-js-gamepad)
JspadGetButtonsゲームパッドのボタン入力状態を取得(mod_dish-js-gamepad)
JspadGetLeftTriggerゲームパッドのLトリガー(L2)アナログ入力情報を取得(mod_dish-js-gamepad)
JspadGetRightTriggerゲームパッドのRトリガー(R2)アナログ入力情報を取得(mod_dish-js-gamepad)
JspadGetLeftXゲームパッドのLスティックX方向のアナログ入力情報を取得(mod_dish-js-gamepad)
JspadGetLeftYゲームパッドのLスティックY方向のアナログ入力情報を取得(mod_dish-js-gamepad)
JspadGetRightXゲームパッドのRスティックX方向のアナログ入力情報を取得(mod_dish-js-gamepad)
JspadGetRightYゲームパッドのRスティックY方向のアナログ入力情報を取得(mod_dish-js-gamepad)
JspadSetBAYXゲームパッドの A⇔B, X⇔Y ボタンの入れ替え設定(mod_dish-js-gamepad)

サンプル逆引き (1)

sample05_gamepad.hsp#include "hsp3dish.as" #include "ezlocal-dish-js.hsp" e..

情報

プラグイン / モジュールmod_dish-js-gamepad
バージョン1.1
作成日2025/1/3
著作者MIZUSHIKI
URLhttps://suwa.pupu.jp/HSP/index.html
備考HSP3Dish.jsでゲームパッドを使用できるようになります。[Gamepad API利用]
タイプ拡張命令
グループ拡張入出力制御命令
対応環境・Windows 版 HSP