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
関連項目
サンプル逆引き (1)
情報