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