TOP概要>入力
 [基本文法]  [変数]  [システム変数]  [マクロ]  [CGレイヤ]  [タスク]  [入力]
■入力

システム変数を使って、現在どのキー/マウスボタン/ゲームパッドボタンが押されているかを
調べることが出来ます。

例えば「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億年)になります。
とりあえず人類が存在しているうちはオーバーフローすることはないです(^^;


このことから、
『値は変化し続けるがオーバーフローは起こさない』と保証することが出来ます。