・概要

 「地形移動」が設定された地形は、移動の処理を行う
 処理の順序は「地形移動に関する処理」→「ゼロに関する処理」とする必要がある

 「手動で地形の番号を設定する地形」にのみ、地形移動を設定する。地形の出現・消滅の「・手動で地形の番号を設定する地形」を参照。

↓地形移動。

 なお、このゲームでは汎用性を持たせているため、梯子・沈む地形・水・風なども移動させることができる。

↓地形移動(梯子・沈む地形・水・風)。

・地形のカウント用の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

 「地形移動を行う地形のMC」に、「地形移動の番号」の記述をしておく。地形の出現・消滅の「・地形の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