・概要

 ここでは、主に、ゼロに関して解説する。
 処理の基礎に関しては、地形との接触判定を参照。

 なお、壁を厚くしているのは、ゼロが壁に近接した状態において、バスターを貫通させないためである

↓壁を薄くした場合。バスターが貫通する。

・壁(右)との接触判定

 地形との接触判定の「・「移動量」「地形めり込み量の最大値」に関する処理+「接触判定」+「位置調整」」を参照。

・壁(左)との接触判定

・・概要

 壁(右)とほぼ同様の処理を行っている。

・・地形めり込み量の最大値(初期値)

 壁(右)とほぼ同様であるが、移動量に「-1」を掛けている点が異なる。

ASのファイル:initial_hit_max.txt
 
initial_hit_x_max_left=-MC_dx+1	//左
 

・・接触判定

 壁(右)とほぼ同様の処理を行っている。

↓地形めり込み量。

・①:「this.getBounds(_root.board).xMin」。ゼロのhitrectの左端の位置。
・②:「landform_xmax」。
・③:「hit_x_wall_left」。②-①。
・④:「hit_x_max_left」。③<=④の条件が満たされるため、接触判定が付加される。

ASのファイル:zero_hit_wall_left.txt
 
		hit_x_wall_left=landform_xmax-this.getBounds(_root.board).xMin	//地形めり込み量
 
		if(hit_x_wall_left<=hit_x_max_left){	//地形めり込み量が最大値以下の場合
			hit_wall_left=i	//接触判定}
 

・・位置調整

 壁(右)とほぼ同様の処理を行っている。

ASのファイル:zero_hit_wall_left.txt
 
			_parent._x+=hit_x_wall_left	//位置調整
 

・地形に挟まれることによる即死判定(壁(右、左))

・・概要

 地形による位置調整の後で、「地形に挟まれることによる即死判定(壁(右、左))」を取得する
 各種地形・敵の影響の「・各種地形・敵の影響(2)」の「・・地形に挟まれることによる即死」も参照。

・・判定の付加

 ”単純”な接触判定(hitTest)がある場合は、「地形に挟まれることによる即死判定(壁(右、左))」を付加する
 ここでは、「右」を例にするが、「左」も同様の処理をしている。

ASのファイル:zero_hit_landform_enemy.txt
 
for(i=1;i<=_root.i_wall_right;i++){
	if(this.hitTest(_root.board["wall_right_"+i])){caught_wall_right=i}
}
 

・・地形による位置調整の前に、判定を取得する場合

 地形による位置調整の前に、判定を取得する場合は、以下のような不具合が生じる。

↓地形による位置調整の前に、判定を取得する場合。天井があるにも関わらず、壁(左)と接触し、「地形に挟まれることによる即死判定(壁(左))」が付加される。

↓地形による位置調整の前に、判定を取得する場合。

↓地形による位置調整の後に、判定を取得する場合。天井による位置調整により、壁(左)と接触せず、「地形に挟まれることによる即死判定(壁(左))」が付加されない。

・壁蹴りを可能にする判定

・・概要

 ジャンプ中に、「ゼロのhitrect(前方)」と壁との接触判定がある場合は、「壁蹴りを可能にする判定」を付加する
 壁蹴りへの移行に関しては、ジャンプの「・他のアクションへの移行」の「・・壁蹴りへの移行」も参照。

↓ゼロのhitrect(前方)(灰色の矩形)と壁との接触判定

 前提となる条件は、以下の通りとなる。

ASのファイル:zero_hit_landform_enemy.txt
 
if(_root.zero_action=="jump"){	//ジャンプの場合}
 

・・判定の付加

 ここでは、ゼロが右向きの場合を解説する。ゼロが左向きの場合も、同様の処理をしている。

ASのファイル:zero_hit_landform_enemy.txt
 
	if(_root.zero_direction==1){
		for(i=1;i<=_root.i_wall_right;i++){
			landform=_root.board["wall_right_"+i]	//参照先を変数に保存
			if(_parent.zero_front_hitrect.hitTest(landform)){
				zero_wall_kick_enable=1	//壁蹴りを可能にする判定
				if(landform.ice_wall==1){zero_wall_kick_enable=0;break}	//氷の壁との接触判定がある場合,壁蹴りを可能にする判定をリセット,ループを離脱
			}
		}
	}
 
・「if(_root.zero_direction==1)」:ゼロが右向きの場合。
・「if(_parent.zero_front_hitrect.hitTest(landform))」:「ゼロのhitrect(前方)」と壁(右)との接触判定がある場合。
・「zero_wall_kick_enable=1」:「壁蹴りを可能にする判定」を付加する。ゼロが左向きの場合は、「-1」となる。
・「if(landform.ice_wall==1){zero_wall_kick_enable=0;break}」:氷の壁との接触判定がある場合は、「壁蹴りを可能にする判定」をリセットし、ループを離脱する。氷の壁に関しては、氷の壁を参照。

最終更新:2020年12月19日 09:22