・概要

 (専用の処理を構築していない場合)「傾斜床を下る」と、傾斜床との接触判定がなくなることで、ジャンプに移行してしまうその他のアクションの移行の「・ジャンプへの移行(床・傾斜床などとの接触判定がなくなった場合)」を参照。
 ここでは、傾斜床との接触判定がある場合、同時に「傾斜床(補助)」との接触判定を付加し、位置調整を行うことで対処している。あまりスマートな方法ではないと思われるが、これ以外に良い方法を思いつかなかった…。

↓位置調整がない場合。

・loadの処理

・・位置調整用の値

 「傾斜床(補助)との接触判定がある場合の位置調整用の値」を設定する
 この値を大きくするほど、より急角度の傾斜床を下れるようになるただし、過剰に大きな値とした場合は、傾斜床を貫通する可能性が生じる

↓急角度の傾斜床

ASのファイル:zero_load.txt
 
_root.zero_sloped_floor_support=10	//傾斜床(補助)との接触判定がある場合の位置調整用の値
 

・・位置調整の判定

 「・傾斜床(補助)との接触判定がある場合の処理」を参照。

ASのファイル:zero_load.txt
 
sloped_floor_support_move=0	//傾斜床(補助)による位置調整の判定
 

・・床・傾斜床のグループ(保存用)

 「・床・傾斜床のグループ」を参照。

ASのファイル:zero_load.txt
 
floor_group_old=0	//床・傾斜床のグループ(保存用)
 

・傾斜床(補助)との接触判定(傾斜床)

 傾斜床との接触判定がある場合は、同時に、傾斜床(補助)との接触判定を付加する。

ASのファイル:zero_hit_sloped_floor.txt
 
if(hit_sloped_floor!=0){	//接触判定がある場合
︙
	hit_sloped_floor_support=1	//傾斜床(補助)との接触判定
}
 

・傾斜床(補助)との接触判定(傾斜床以外の地形)

 傾斜床以外の地形(床など)との接触判定がある場合も、傾斜床(補助)との接触判定を付加させることができる。

 「傾斜床(補助)との接触判定を付加させるための地形のMC」に、以下の記述をしておく。地形の出現・消滅の「・地形のMCの構造」も参照。

ASのファイル:なし
 
onClipEvent(load){
	sloped_floor_support=1	//傾斜床(補助)
}
 

 上記の記述により、該当する地形との接触判定がある場合は、同時に「傾斜床(補助)との接触判定」が付加される。

ASのファイル:landform_property.txt
 
if(landform.sloped_floor_support==1){hit_sloped_floor_support=1}
 

・傾斜床(補助)との接触判定がある場合の処理

・・位置調整

 傾斜床(補助)との接触判定がある場合、次のフレームにおいて、特定のアクションの状態の場合は、「傾斜床(補助)による位置調整の判定」を付加する。そして、「傾斜床(補助)による位置調整の判定」がある場合は、位置調整を行う。このような処理をすることで、床・傾斜床と密着しながら移動できるようになる。

↓位置調整。内部的な処理の段階であり、実際のゲーム画面では表示されない。この後に、傾斜床(右上がり)との接触判定の取得と、位置調整が行われることになる。

・①:「_root.zero_sloped_floor_support」。「傾斜床(補助)との接触判定がある場合の位置調整用の値」。

↓位置調整がある場合。

ASのファイル:zero_effect_landform_enemy_1.txt
 
sloped_floor_support_move=0	//判定をリセットしておく
if(_root.zero_hit_sloped_floor_support!=0 and (_root.zero_action=="normal" or _root.zero_action=="walk" or _root.zero_action=="dash")){	//特定のアクションの状態の場合
	sloped_floor_support_move=1	//傾斜床(補助)による位置調整の判定
}
 

 位置調整は、床・傾斜床との接触判定を取得する直前に行う。また、地形めり込み量の最大値の補正を行う

ASのファイル:zero_hit_landform_enemy.txt
 
if(sloped_floor_support_move==1){	//傾斜床(補助)による位置調整の判定がある場合
	_parent._y+=_root.zero_sloped_floor_support	//位置調整
	initial_hit_y_max_down+=_root.zero_sloped_floor_support	//地形めり込み量の最大値の補正
}
 

・・位置調整を元に戻す

 「傾斜床(補助)による位置調整の判定」があり、床・傾斜床との接触判定がない場合は、位置調整を元に戻す。このような処理をしない場合は、傾斜床の端から落下する場合にも、位置調整が行われることになる。

↓位置調整を元に戻さない場合。

↓位置調整を元に戻す場合。

ASのファイル:zero_hit_landform_enemy.txt
 
if(sloped_floor_support_move==1 and hit_floor==0 and hit_sloped_floor==0){_parent._y-=_root.zero_sloped_floor_support}	//傾斜床(補助)による位置調整の判定があり,床・傾斜床との接触判定がない場合,位置調整を元に戻す
 

・床・傾斜床のグループ

・・概要

 傾斜床(補助)による位置調整の処理を行う場合、極めて間隔の狭い床・傾斜床との接触判定を取得してしまう場合がある。ここでは、そのような問題を回避するために、「床・傾斜床のグループ」を設定している

↓極めて間隔の狭い床・傾斜床との接触判定の取得。位置調整が行われることにより、ダッシュを継続することになる。

・・床・傾斜床のグループの設定

 「床・傾斜床のグループを設定する地形のMC」に、「床・傾斜床のグループ」に関する記述をしておく。

 以下に、例を示す。

ASのファイル:なし
 
onClipEvent(load){
	floor_group=1
}
 
・「floor_group=1」:「床・傾斜床のグループ」を「1」と設定する。

・・床・傾斜床のグループの取得

 床・傾斜床との接触判定を取得する際に、「床・傾斜床のグループ」の取得を行う。設定されていない場合は「0」とする。
 「0」の場合は、特に制約を受けずに接触判定を取得することになる

ASのファイル:zero_hit_sloped_floor_sub.txt、zero_hit_floor.txt
 
floor_group=landform.floor_group	//床・傾斜床のグループ
if(floor_group==undefined){floor_group=0}	//床・傾斜床のグループが設定されていない場合
 

・・床・傾斜床のグループの保存

 床・傾斜床との接触判定がある場合は、「床・傾斜床のグループ」を保存する。

ASのファイル:zero_hit_sloped_floor_sub.txt、zero_hit_floor.txt
 
		floor_group_old=floor_group	//床・傾斜床のグループを保存
 

・・床・傾斜床のグループが同一ではない場合の処理

 「床・傾斜床のグループ(保存用)」と「接触判定を取得する地形における、床・傾斜床のグループ」が同一ではない場合は、ループをスキップする。つまり、接触判定を取得しないことになる
 ただし、「0」の場合を除く。

↓「床・傾斜床のグループ」が同一ではない床・傾斜床との接触判定を取得しない。位置調整が行われないため、ダッシュを継続せずにジャンプに移行する。

 ここでは、「床・傾斜床のグループ」を、それぞれ「1(左の傾斜床)」「2(中央の傾斜床)」「1(右の床)」と設定している。

ASのファイル:zero_hit_sloped_floor_sub.txt、zero_hit_floor.txt
 
if(floor_group!=0 and floor_group_old!=0 and floor_group!=floor_group_old){continue}	//床・傾斜床のグループが同一ではない場合,ループをスキップ(0の場合を除く)
 
・「floor_group!=0」:「接触判定を取得する地形における、床・傾斜床のグループ」が「0」ではない。
・「floor_group_old!=0」:「床・傾斜床のグループ(保存用)」が「0」ではない。
・「floor_group!=floor_group_old」:「床・傾斜床のグループ(保存用)」と「接触判定を取得する地形における、床・傾斜床のグループ」が同一ではない。

・・床・傾斜床のグループのリセット

 床・傾斜床との接触判定がない場合は、「床・傾斜床のグループ(保存用)」をリセットする。この処理により、新たに接触判定を取得することが可能になる
 上の動画における、「floor_group_old」が「0」になるタイミングも参照。

ASのファイル:zero_hit_floor.txt
 
if(hit_sloped_floor==0 and hit_floor==0){floor_group_old=0}	//床・傾斜床との接触判定がない場合,床・傾斜床のグループ(保存用)をリセット
 

最終更新:2020年12月19日 10:56