・概要

 ここでは、キー入力の処理に関して解説する。参考サイト(https://hakuhin.jp/as/key.html)。

 キー入力の処理は、マスクとゼロにおいて行っている。

・loadの処理

・・概要

 各種の初期値の代入は、マスクのMCにおいて行っている。初期設定、モニタリングも参照。

・・キーコード

 キーコードを代入する。

ASのファイル:mask.txt
 
	_root.key_up=87;…
 
 「_root.key_xxx」は、キーコードを代入するための変数である。
 このゲームでは、例えば、初期状態では、「Wのキー」を「上キー」として割り当てているため、「_root.key_up」に、「Wに対応するキーコード」である「87」を代入している。

・・キーの名前のリスト

 記述を簡略化するため、「キーの名前のリスト」を作成している。
 また、「キーの名前の個数」を「ループの終値」として設定している。

ASのファイル:mask.txt
 
	_root.key_name_list=["up","down","right","left","jump","dash","saber","buster","start","select"]	//キーの名前のリスト
	_root.i_key_name_max=_root.key_name_list.length	//ループの終値(キーの名前)
 

・・キー入力の判定の結果を代入するMC

 マスクにおいては、「キー入力の判定の結果を代入するMC」を「_root」にしている。このように設定することで、他のMCからもキー入力の判定の結果を参照できるようになる。

ASのファイル:mask.txt
 
	keydown_MC=_root	//キー入力の判定の結果を代入するMC
 

・・キー入力の判定

 「キーの名前のリスト」を用いて、各種の「キー入力の判定」に初期値である「0」を代入している。

ASのファイル:mask.txt
 
	for(i=1;i<=_root.i_key_name_max;i++){
		keydown_MC["keydown_"+_root.key_name_list[i-1]]=0	//キー入力の判定(0:入力がない,1:入力がある)
		keydown_MC["keydown_old_"+_root.key_name_list[i-1]]=0	//キー入力の判定(保存用)
		keydown_MC["keydown_new_"+_root.key_name_list[i-1]]=0	//キー入力の判定(新たに入力があったか否か)(0:入力がない,1:入力がある)
	}
 

・各キーの入力に関する判定(マスク)

・・概要

 各キーの入力に関する判定は、2つの処理に分けられている。マスクの場合は、連続して行っている。

ASのファイル:mask.txt
 
	#include "zero_AS/keydown_1.txt"
	#include "zero_AS/keydown_2.txt"
 

・・キー入力の判定

 「現在のフレームにおいて、キー入力があるか否か」を判定する。「ある場合」は「1」、「ない場合」は「0」を代入する(他の変数も同様)。

ASのファイル:keydown_1.txt
 
	if(Key.isDown(_root["key_"+_root.key_name_list[i-1]])){keydown_MC["keydown_"+_root.key_name_list[i-1]]=1}	//キー入力の判定
	else{keydown_MC["keydown_"+_root.key_name_list[i-1]]=0}
 

・・キー入力の判定(保存用)

 上記の判定の結果を保存する。この処理は、ASの最後に記述する必要がある。

ASのファイル:keydown_2.txt
 
	keydown_MC["keydown_old_"+_root.key_name_list[i-1]]=keydown_MC["keydown_"+_root.key_name_list[i-1]]	//キー入力の判定(保存用)にキー入力の判定を代入
 

・・キー入力の判定(新たに入力があったか否か)

 上記の2種類の変数を用いて、「新たに入力があったか否か」の判定を取得する。参考サイト(https://hakuhin.jp/as/key.html#KEY_02)。

ASのファイル:keydown_1.txt
 
	if(keydown_MC["keydown_"+_root.key_name_list[i-1]]==1 and keydown_MC["keydown_old_"+_root.key_name_list[i-1]]==0){keydown_MC["keydown_new_"+_root.key_name_list[i-1]]=1}	//キー入力の判定(新たに入力があったか否か)
	else{keydown_MC["keydown_new_"+_root.key_name_list[i-1]]=0}
 

・各キーの入力に関する判定(ゼロ)

・・概要

 ゼロは、マスクとは別に「各キーの入力に関する判定」を取得している。理由は、以下の通りとなる。
・マスクにおける判定を用いると、原理的に、キー入力に対する反応が1フレーム遅れる。
・マスクにおける判定を用いると、セイバーのヒットストップの影響で、キー入力が無効化される場合が出てくる。

・・loadの処理

・・・キー入力の判定の結果を代入するMC

 ゼロの場合は、「キー入力の判定の結果を代入するMC」は、「this」(ゼロのhitrect)となる。

ASのファイル:zero_load.txt
 
keydown_MC=this	//キー入力の判定の結果を代入するMC
 

・・各キーの入力に関する判定

 ゼロの場合は、マスクとは異なり、間に「キー入力関連の処理」を挟むことになる。

ASのファイル:zero.txt
 
		#include "zero_AS/keydown_1.txt"#include "zero_AS/keydown_2.txt"
 

・・例

 「通常状態からジャンプ開始への移行」を例にして解説する。

↓ジャンプキーの例。

 「keydown_jump」が「1」の場合であっても、必ずしも「ジャンプ開始に移行」するとは限らない。同時に「keydown_old_jump」が「0」となり、「keydown_new_jump」が「1」となった場合にのみ「ジャンプ開始に移行」する。

最終更新:2020年12月12日 10:51
添付ファイル