・概要
「地形移動」が設定された地形は、移動の処理を行う。
処理の順序は「地形移動に関する処理」→「ゼロに関する処理」とする必要がある。
「手動で地形の番号を設定する地形」にのみ、地形移動を設定する。
地形の出現・消滅の「・手動で地形の番号を設定する地形」を参照。
↓地形移動。
なお、このゲームでは汎用性を持たせているため、梯子・
沈む地形・水・風なども移動させることができる。
↓地形移動(梯子・沈む地形・水・風)。
・地形のカウント用のMC
「地形のカウント用のMC」において「地形移動の速度」を管理している。また、「地形の移動」や「背景の移動」の処理も行っている。
ボードの「・ステージのボードのAS」の「・・loadの処理」の「・・・地形のカウント用のMC」を参照。
「地形移動の速度」の設定の例は、以下の通りとなる。
ASのファイル:landform_count_stage_select.txt
count_landform_movement[1-1]++
if(count_landform_movement[1-1]<=60){_root.velocity_landform_movement_x[1-1]=1;_root.velocity_landform_movement_y[1-1]=-1}
else if(count_landform_movement[1-1]<=120){_root.velocity_landform_movement_x[1-1]=-1;_root.velocity_landform_movement_y[1-1]=1}
if(count_landform_movement[1-1]==120){count_landform_movement[1-1]=0}
・「count_landform_movement[1-1]」:地形移動のカウント。
・「_root.velocity_landform_movement_x[1-1]」「_root.velocity_landform_movement_y[1-1]」:地形移動の速度(x・y方向)。カウントの値に応じて変化する。
・「if(count_landform_movement[1-1]==120){count_landform_movement[1-1]=0}」:カウントが一定の値となった場合、リセットする。
・地形移動を行う地形のMC
以下に例を示す。
ASのファイル:なし
onClipEvent(load){
number_landform_movement=1 //地形移動
}
この処理により、該当する地形は、「_root.velocity_landform_movement_x[1-1]」「_root.velocity_landform_movement_y[1-1]」の値に応じて移動することになる。
・loadの処理
・・地形移動の番号
地形移動の番号を親のMCより取得する。地形移動の番号に関して親のMCに記述がない場合は、「0」にする。
「・地形移動を行う地形のMC」も参照。
ASのファイル:landform_appearance_hitrect_manual.txt
number_landform_movement=_parent.number_landform_movement //地形移動の番号(親のMCより取得)
if(number_landform_movement==undefined){number_landform_movement=0;_parent.number_landform_movement=0} //地形移動の番号に関して親のMCに記述がない場合
・・インスタンス名の保存、地形移動の番号の保存
・・・概要
「地形移動の対象・番号の保存用」の配列に、「地形移動の対象となる地形」の「インスタンス名」と「地形移動の番号」を保存する。
「地形移動の対象・番号の保存用」の配列に関しては、
ボードの「・ステージのボードのAS」の「・・loadの処理」の「・・・各種の初期値の代入」も参照。
前提となる条件は、以下の通りとなる。
ASのファイル:landform_appearance_hitrect_manual.txt
if(number_landform_movement!=0){ //地形移動の番号が0以外の場合
︙
}
・・・保存
「_root.landform_movement_identify」に「地形移動の対象となる地形のインスタンス名」を、「_root.landform_movement_identify_number」に「地形移動の対象となる地形が従う地形移動の番号」を保存する。
同時に、終値を増加させる。
インスタンス名は、地形無効の処理により変化する可能性があるので、インスタンス名の変更後に関しても、番号を保存する。
ASのファイル:landform_appearance_hitrect_manual.txt
_root.landform_movement_identify[_root.i_landform_movement_identify-1]=initial_name //地形移動の対象となる地形のインスタンス名を保存
_root.landform_movement_identify_number[_root.i_landform_movement_identify-1]=number_landform_movement //地形移動の対象となる地形が従う地形移動の番号を保存
_root.i_landform_movement_identify++ //終値を増加させる
_root.landform_movement_identify[_root.i_landform_movement_identify-1]="'"+initial_name //地形移動の対象となる地形のインスタンス名を保存(インスタンス名の変更後)
_root.landform_movement_identify_number[_root.i_landform_movement_identify-1]=number_landform_movement //地形移動の対象となる地形が従う地形移動の番号を保存(インスタンス名の変更後)
_root.i_landform_movement_identify++ //終値を増加させる
・・・例
設定の例は、以下の通りとなる。
↓設定の例。
この例においては、例えば「floor_9」「'floor_9」は、地形移動の速度に関して、「地形移動の番号が「1」」の設定に従う。また、「floor_10」「'floor_10」は、地形移動の速度に関して、「地形移動の番号が「2」」の設定に従う。
他の地形も同様となる。
・地形の移動
「・loadの処理」の「・・インスタンス名の保存、地形移動の番号の保存」において設定した条件に基づき、地形を移動させる。
ASのファイル:landform_count_stage_select.txt
for(i=1;i<=_root.i_landform_movement_identify;i++){
_root.board[_root.landform_movement_identify[i-1]]._x+=_root.velocity_landform_movement_x[_root.landform_movement_identify_number[i-1]-1]
_root.board[_root.landform_movement_identify[i-1]]._y+=_root.velocity_landform_movement_y[_root.landform_movement_identify_number[i-1]-1]
}
「・loadの処理」における例の場合、例えば、「i=1」の場合は、以下の通りとなる。
ASのファイル:なし
_root.board.floor_9._x+=_root.velocity_landform_movement_x[1-1]
_root.board.floor_9._y+=_root.velocity_landform_movement_y[1-1]
この処理により、「floor_9」は、「地形のカウント用のMC」において設定した速度の値に基づいて移動することになる。
・ゼロの処理
・・概要
ゼロと地形との接触判定に関しても、地形移動による影響を反映させる必要がある。
この処理は、一部の敵にも適用している。
・・地形移動の番号、地形移動の速度の取得
各種地形との接触判定を取得する際に、地形移動の番号と地形移動の速度の取得を行う。
ASのファイル:landform_position_gradient_movement.txt
number_landform_movement=landform.number_landform_movement //地形移動の番号
if(number_landform_movement==0){velocity_landform_movement_x=0;velocity_landform_movement_y=0}
else{velocity_landform_movement_x=_root.velocity_landform_movement_x[number_landform_movement-1];velocity_landform_movement_y=_root.velocity_landform_movement_y[number_landform_movement-1]} //地形移動の速度(x・y方向)
該当する地形のMCの参照先を「landform」に保存していることに注意。
実際の移動は、次のフレームで行われることになる。
・・地形移動による移動
・・・概要
「・・地形移動の番号の取得」において取得した「地形移動の番号」の値に基づき、移動を行う。
地形移動による移動には、「全般」と「x方向のみ」の2種類がある。
・・・地形移動による移動の設定
地形移動による移動の設定を行う。
ここでは、壁(右)との
接触判定がある場合を例にする。
壁(右)に関しては、ゼロの
壁ずり落ちの場合のみ、地形移動による移動の判定(全般)を付加する。
また、壁(右)が左方向に移動している場合のみ、地形移動による移動の判定(x方向のみ)を付加する。
↓地形移動による移動(全般)。分かりやすくするため、フロッグLV2を装着している。
↓地形移動による移動(x方向のみ)。
ASのファイル:zero_hit_wall_right.txt
if(MC_hit_landform=="zero" and _root.zero_action=="wall_slide"){number_landform_movement_MC_move=number_landform_movement} //地形移動による移動(ゼロの壁ずり落ちの場合のみ)
else if(velocity_landform_movement_x<0){number_landform_movement_MC_move_x=number_landform_movement} //地形移動による移動(x方向のみ)
床・
傾斜床・沈む地形に関しては、接触判定がある場合に、地形移動による移動の判定(全般)を付加する。
梯子に関しては、接触判定があり、ゼロが
梯子昇降している場合のみ、地形移動による移動の判定(全般)を付加する。
・・・ゼロの移動
地形移動による移動の判定がある場合、(次のフレームで)ゼロの移動に関する処理を行う。
当然ながら、この処理は「移動量」の処理の前に行う必要がある。
地形移動による移動の判定(全般)がある場合は、x・y方向の移動の処理を行う。
地形移動による移動の判定(x方向のみ)がある場合は、x方向のみの移動の処理を行う。
ASのファイル:zero_hit_landform_enemy_preprocessing.txt
if(number_landform_movement_MC_move!=0){ //全般
_parent._x+=_root.velocity_landform_movement_x[number_landform_movement_MC_move-1]
_parent._y+=_root.velocity_landform_movement_y[number_landform_movement_MC_move-1]
}
if(number_landform_movement_MC_move_x!=0){ //x方向のみ
_parent._x+=_root.velocity_landform_movement_x[number_landform_movement_MC_move_x-1]
}
・・地形めり込み量の最大値の補正
・・・概要
「地形移動を行っている地形」との接触判定を取得する際は、地形めり込み量の最大値の補正を行う。この補正を行わない場合は、ゼロが地形を貫通する。
「地形めり込み量の最大値」に関しては、
地形との接触判定の「・「移動量」「地形めり込み量の最大値」に関する処理+「接触判定」+「位置調整」」を参照。
・・・壁
ここでは、壁(右)を例にする。
壁(右)が左に移動している場合は、「地形めり込み量の最大値(右)」に「地形移動の速度(x方向)」の絶対値を加算する。
ASのファイル:zero_hit_wall_right.txt
if(velocity_landform_movement_x<0){hit_x_max_right+=Math.abs(velocity_landform_movement_x)} //地形移動による補正(x方向)
壁(左)に関しても、同様の処理を行う。
・・・床・天井
ここでは、床を例にする。
床が上に移動している場合は、「地形めり込み量の最大値(下)」に「地形移動の速度(y方向)」の絶対値を加算する。
ASのファイル:zero_hit_floor.txt
if(velocity_landform_movement_y<0){hit_y_max_down+=Math.abs(velocity_landform_movement_y)} //地形移動による補正(y方向)
天井に関しても、同様の処理を行う。
また、ゼロがライトを装着している場合の沈む地形に関しても、同様の処理を行う。
・・・傾斜床・傾斜天井
ここでは、傾斜床(右上がり)を例にする。
傾斜床の場合は、床の処理に加えて、「傾斜床の勾配」を考慮した補正も行う必要がある。
傾斜床(右上がり)が左に移動している場合は、「地形めり込み量の最大値(下)」に「地形移動の速度(x方向)」×「傾斜床(右上がり)の勾配」の絶対値を加算する。
ASのファイル:zero_hit_sloped_floor_sub.txt
if(velocity_landform_movement_x<0){hit_y_max_down+=Math.abs(velocity_landform_movement_x*landform_gradient)} //地形移動による補正(x方向)
傾斜床(右下がり)や
傾斜天井に関しても、同様の処理を行う。
最終更新:2020年12月19日 10:26