stick

キー入力情報取得

stick p1,p2,p3

p1=変数    : 読み込むための変数
p2=0~(0)  : 非トリガータイプキー指定
p3=0~1(1) : ウィンドウアクティブチェックON/OFF

解説

よく使われるキーボード及びマウスボタンの状態をまとめてチェックして変数に代入します。

stick命令が実行されると以下のような複数のボタン情報が1つの数値として、p1で指定した変数に代入されます。

値(10進)  値(16進) キー
-------------------------------------
     1  : $00001 : カーソルキー左(←)
     2  : $00002 : カーソルキー上(↑)
     4  : $00004 : カーソルキー右(→)
     8  : $00008 : カーソルキー下(↓)
    16  : $00010 : スペースキー
    32  : $00020 : Enterキー
    64  : $00040 : Ctrlキー
   128  : $00080 : ESCキー
   256  : $00100 : マウスの左ボタン
   512  : $00200 : マウスの右ボタン
  1024  : $00400 : TABキー
  2048  : $00800 : [Z]キー
  4096  : $01000 : [X]キー
  8192  : $02000 : [C]キー
 16384  : $04000 : [A]キー
 32768  : $08000 : [W]キー
 65536  : $10000 : [D]キー
131072  : $20000 : [S]キー

何もボタンが押されていない場合には0が代入されます。

もし複数のボタンが同時に押されていた場合には、それらの数値がすべて加算されます。
たとえば、カーソルキーの右とスペースキーが同時に押されている場合には、4+16の20が変数に読み込まれます。
この数値をif命令などでチェックする場合には、演算子「&」が役に立ちます。

例 :
	stick a,0            ; 変数aにキー状態を読み出し
	if a&16 : goto *spc  ; スペースが押されたか?
	if a&32 : goto *ent  ; Enterが押されたか?

このように「変数&キー情報」で複数のボタン情報が入った数値から、 1つだけのキー情報を取り出すことができます。

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

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

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

この命令は、非常に複雑に見えますがキーを使ったスクリプトを作る際にとても便利な機能となるでしょう。
たとえば、シューティングゲームを思い浮かべてみてください。自分の機体は上下左右の方向にボタンが押されている間ずっと移動しなければなりません。しかし、ミサイルを発射するボタンは1回押してはなすまでは次の弾は発射されません。
このような場合には、上下左右のキーだけは非トリガータイプのキーに指定して、それ以外は1度だけ押された情報を返すようにすればいいわけです。

また、p3でウィンドウがアクティブでない場合は入力を無効にする機能をON/OFFすることができます。
p3が1か省略された場合は、HSPウィンドウがアクティブでない場合にはキー入力が無効になります。
p3が0の場合は、すべての状況下でキー入力を行ないます。

関連項目

getkeyキー入力チェック
jstickstick命令互換の値を取得する(mod_joystick2)

サンプル逆引き (138)

addline.hsp
block3.hsp
block3.hsp
block3_ad.hsp
buffer.hsp
celput.hsp
celputm.hsp
cnvaxis.hsp
cnvaxis.hsp
customshader.hsp
d3m_techdemo.hsp
defcfunc.hsp
demo.hsp
doukutu.hsp
drop.hsp
drop_dish.hsp
ease_test3.hsp
emit_sample1.hsp
emit_sample2.hsp
emit_sample3.hsp
eprim.hsp
es_test10.hsp
es_test2.hsp
es_test3.hsp
es_test4.hsp
es_test5.hsp
es_test6.hsp
es_test7.hsp
es_test8.hsp
es_test9.hsp
feedback.hsp
fullscr.hsp
groll.hsp
gsquare.hsp
hgview.hsp
hsptv_test3.hsp
joystick1.hsp
joystick2.hsp
joystick3.hsp
keymove1.hsp
keymove2.hsp
keymove3.hsp
keymove4.hsp
kick.hsp
light_test1.hsp
light_test2.hsp
light_test3.hsp
light_test4.hsp
light_test5eff.hsp
mapedit.hsp
mapmove1.hsp
mapmove2.hsp
meshmap.hsp
meshmap2.hsp
meshmap3.hsp
meshmap4.hsp
meshmap5.hsp
meshmap6.hsp
meshmap7.hsp
mtouch.hsp
obaqhg1.hsp
obaqhg2.hsp
obaqhg3.hsp
obaqme.hsp
obaqtest.hsp
objfade.hsp
objshadow.hsp
objsort.hsp
particle.hsp
physics_2.hsp
posteffect.hsp
pronama2.hsp
pronama3.hsp
pronama4.hsp
pronama5.hsp
pronama_box.hsp
qvbtest.hsp
sample12.hsp
sample13.hsp
settex.hsp
shoot.hsp
skybox.hsp
sndedit.hsp
stick.hsp
tamane1.hsp
tamane1.hsp
tamane2.hsp
tamane2.hsp
tamane3.hsp
tamane3.hsp
tamane4.hsp
tamane_jump.hsp
tamane_tree.hsp
test1.hsp
test1.hsp
test10.hsp
test10.hsp
test10.hsp
test11.hsp
test11.hsp
test12.hsp
test12.hsp
test13.hsp
test13.hsp
test2.hsp
test2.hsp
test3.hsp
test3.hsp
test4.hsp
test4.hsp
test4.hsp
test5.hsp
test5.hsp
test5.hsp
test6.hsp
test6.hsp
test6.hsp
test7.hsp
test7.hsp
test8.hsp
test8.hsp
test8.hsp
test9.hsp
test9.hsp
test9.hsp
tof2.hsp
volsamp.hsp
wave.hsp
xsample_amano.hsp
xsample_Astro.hsp
xsample_diamond.hsp
xsample_gcube.hsp
xsample_gcube.hsp
xsample_gimbal.hsp
xsample_Rocket.hsp
xsample_shiraho.hsp
xsample_verge.hsp
yopparai.hsp

情報

バージョン3.6
作成日2019/12/12
著作者onitama
URLhttp://hsp.tv/
備考ver3.6標準命令
タイプ内蔵命令
グループ基本入出力制御命令
対応環境
  • Windows 版 HSP
  • コマンドライン版 HSP
  • HSPLet
hs ファイルhsphelp\i_stdio.hs