■入力
システム変数を使って、現在どのキー/マウスボタン/ゲームパッドボタンが押されているかを
調べることが出来ます。
例えば「A」キーが押されている間、それに対応するシステム変数 @_KEY_A の値が
押された瞬間から
1 → 2 → 3 → 4 → 5 → 6 → ...
と1フレーム毎に変化していきます。
「A」キーが離された場合(押されていない場合)、今度は @_KEY_A の値は
離された瞬間から
-1 → -2 → -3 → -4 → -5 → -6 → ...
と1フレーム毎に変化していきます。
このことを利用して、IF 文などを使ってキー/マウス/パッド入力処理をおこなうことが出来ます。
いろいろ例を挙げてみます。
-----------------------------------------------------------------------
例1
LOOP[]
IF[@_KEY_Z==1]
//〜何らかの処理A〜
IFEND[]
WAIT[FRAME=1]
LOOPEND[]
「Z」キーが押された瞬間、1回だけ処理Aが実行されることになります。
-----------------------------------------------------------------------
例2
LOOP[]
IF[@_KEY_Z>0]
//〜何らかの処理A〜
IFEND[]
WAIT[FRAME=1]
LOOPEND[]
@_KEY_Z の値が0より大きいなら式が「真」になるため、この場合
「Z」キーが押されているあいだ毎回処理Aが実行されます。
-----------------------------------------------------------------------
例3
LOOP[]
IF[@_KEY_Z>=60]
//〜何らかの処理A〜
IFEND[]
WAIT[FRAME=1]
LOOPEND[]
「Z」キーを60フレーム分(FPS60設定で1秒)押し続けたら、処理Aが実行されます。
-----------------------------------------------------------------------
例4
INT[@SP_Z=5] // ←2以上の値を入れてください
LOOP[]
IF[@_KEY_Z>0 && (@_KEY_Z+@SP_Z-1)%@SP_Z==0]
//〜何らかの処理A〜
IFEND[]
WAIT[FRAME=1]
LOOPEND[]
こんな書き方をすると、5フレームに1回、処理Aが実行されるようになります。
シューティングの連射設定などにも使えるかと思います。
-----------------------------------------------------------------------
例5
LOOP[]
IF[@_KEY_Z<0]
//〜何らかの処理A〜
IFEND[]
WAIT[FRAME=1]
LOOPEND[]
「Z」キーが押されていなければ、処理Aが実行されます。
-----------------------------------------------------------------------
例6
LOOP[]
IF[@_KEY_Z==-30]
//〜何らかの処理A〜
IFEND[]
WAIT[FRAME=1]
LOOPEND[]
「Z」キーが30フレーム分(FPS60設定で0.5秒)押されなかった場合、処理Aが実行されます。
■オーバーフロー問題と、安全性の保証
常に値が変化していくということは、いずれオーバーフロー(桁あふれ)を起こし、
誤作動するかもしれない問題を孕んでいます。
例えばボタンが何も押されていない状態でも勝手に -1 ずつカウントされていくため、
いずれはオーバーフローを起こし、マイナスが逆にプラス(+)の値になってしまい、
それが原因で『ボタンが押されたものと間違って動作してしまう』事が考えられます。
これは、かなり致命的な不都合のように考えられますが、結論から言ってしまえば
『全く問題にならない』と言うことが出来ます。
なぜなら、そのオーバーフローするまでの時間が半端ではありません。
具体的にどのくらいかと言うと、YU-RISの取り扱う変数は64bit変数であることから、
システム変数の値が -9223372036854775808 という値より小さくなったときに、
オーバーフローすることになります。
仮にFPS60設定の場合、1秒間で -60 カウントされますから、
-9223372036854775808 の値に達するまでの時間を計算すると、
-9223372036854775808 ÷ ( -60 ×60秒×60分×24時間×365日)
= 4874520144 年 (約49億年)
と、これだけかかります(^^;
仮に最高のFPS256設定だとしても 1142465658 年(約11億年)になります。
とりあえず人類が存在しているうちはオーバーフローすることはないです(^^;
このことから、
『値は変化し続けるがオーバーフローは起こさない』と保証することが出来ます。