・概要
敵に関する記述の基礎は、
操作キャラクター とほぼ同様となる。
ここでは主に、敵の特有の処理に関して解説する。
・loadの処理
・・敵の番号、敵の名前
「敵の番号」は、敵の出現時に割り当てられる、敵の固有の番号 のことである。
「敵の名前」は、敵の破壊の際に用いられる場合がある。
ASのファイル:敵のAS
number_enemy
enemy_name="…"
・・位置、速度、加速度、方向、距離など
位置、速度、加速度、方向、距離などの設定を行う。
・・スケール変化、角度、回転、透明度など
スケール変化、角度、回転、透明度などの設定を行う。
・・ライフ、属性など
ライフ、属性などの設定を行う。
このゲームでは、敵の出現判定用の配列にライフを代入している 。破壊不可能、かつ、バスターが貫通しない敵には「100」を代入している。また、バスターが貫通する敵には「0」を代入している。
ASのファイル:敵のAS
_root .enemy_identify [ number_enemy-1 ] =… //敵の出現判定用の配列にライフを代入する
enemy_element="…" //敵の属性
・・破壊、消滅関連
「敵の破壊判定」の初期値の設定や、「破壊判定がある場合のエネミーカウントの増加」の設定を行う。
ASのファイル:敵のAS
enemy_break="none" //敵の破壊判定
enemy_count_plus=… //破壊判定がある場合のエネミーカウントの増加(0:増加しない,1:増加する)
・・敵の攻撃のダメージ、敵の攻撃の連鎖値など
「敵の攻撃のダメージ(敵の接触ダメージ)」「敵の攻撃の連鎖値」を設定する。なお、一部の敵は、条件により、「敵の攻撃のダメージ」が変化する場合がある。
ASのファイル:敵のAS
enemy_attack_damage=… //敵の攻撃のダメージ
enemy_attack_chain=… //敵の攻撃の連鎖値
・・攻撃との接触判定、連鎖値、無敵時間など
・・エフェクト関連
「敵の各種エフェクト判定」「敵の属性エフェクト判定」の初期値を代入する。また、敵の各種エフェクトのスケールを設定する。
ASのファイル:敵のAS
enemy_effect="none" //敵の各種エフェクト判定
enemy_element_effect="none" //敵の属性エフェクト判定
enemy_effect_scale=… //敵の各種エフェクトのスケール
・・各種地形などとの接触判定
「・各種地形などとの接触判定」も参照。
各種地形やゼロとの接触判定の初期値を代入している。また、「
地形移動 の判定」などに関して、ゼロと同様の処理を行っている。
ASのファイル:敵のAS
#include "zero_AS/hit_landform/enemy_load_hit_landform_zero.txt"
・・その他
・アクションの状態:一部の敵は、ゼロと同様に、「アクションの状態」を設定している。
・アクションに関するカウント(時間)、アクションに関するカウント(回数):上と同様。
・幅、高さ:
hitrect の「・hitrectの端の位置・幅・高さ」を参照。
・ボス関連:
ボス の「・loadの処理」を参照。
・敵と攻撃との接触判定がある場合の処理
・敵からのアイテムドロップ
・敵のエフェクトに関する処理
・・概要
敵と攻撃との接触判定がある場合の処理 において、
エフェクト判定が付加された場合は、エフェクトを付加する 。
このゲームは無音のため、これらのエフェクトにより、「敵にダメージが入ったか否か」「弱点属性か否か」を認識できるようにしている。
・・各種エフェクト
ダメージエフェクトやガードエフェクトを付加する。
↓ダメージエフェクト、ガードエフェクト。
ASのファイル:enemy_effect.txt
if ( enemy_effect! ="none" ) { //エフェクト判定がある場合
_root .board .attachMovie ( enemy_effect+"_effect" ,enemy_effect+"_effect_" +number_enemy,_root .depth_enemy_effect +number_enemy) //エフェクトを付加
︙
enemy_effect="none" //エフェクト判定をリセット
}
・・属性エフェクト
ASのファイル:enemy_effect.txt
if ( enemy_element_effect! ="none" and enemy_element_effect! =undifined) { //属性エフェクト判定がある場合
_root .board .attachMovie ( "enemy_element_effect" ,"enemy_element_effect_" +number_enemy,_root .depth_enemy_element_effect +number_enemy) //属性エフェクトを付加
︙
enemy_element_effect="none" //属性エフェクト判定をリセット
}
・敵の破壊判定がある場合の処理
敵の破壊判定がある場合は、以下の処理を行う。
・破壊用のMCを出現させる。なお、出現させないタイプの敵もいる(徐々に透明化して消滅するなど)。
・エネミーカウントを増加させる(増加するタイプの敵のみ) 。
・ボス判定がある場合、ボスのライフを0にする。
・敵の出現判定用の配列において、出現判定をリセットする 。
・MCを削除する。
↓破壊用のMCの付加。
ASのファイル:enemy_break.txt
if ( enemy_break! ="none" ) { //敵の破壊判定がある場合
_root .board .attachMovie ( enemy_name+"_break_" +enemy_break,[ enemy_name+"_break_" +enemy_break+"_" +number_enemy] ,_root .depth_enemy_break +number_enemy) //破壊用のMCを出現させる
︙
if ( enemy_count_plus==1 ) { _root .result_enemy_count ++} //エネミーカウントを増加させる(増加するタイプの敵のみ)
if ( boss_identify==1 ) { _root .boss_life =0 } //ボス判定がある場合,ボスのライフを0にする
_root .enemy_identify [ number_enemy-1 ] ="none" //出現判定をリセット
_parent .removeMovieClip ( ) //MCを削除
}
・無敵時間(敵)
・敵・アイテムの出現判定用のMCとの接触判定がない場合の消滅
敵・アイテムの出現判定用のMCとの接触判定がない場合は、出現判定をリセットし、MCを削除する 。
敵の出現・消滅 の「・敵の出現用の
hitrect からの出現」の動画も参照。
ASのファイル:敵のAS
if ( _parent .hitTest ( _root .enemy_item_appearance_hitrect ) ==false ) { _root .enemy_identify [ number_enemy-1 ] ="none" ;_parent .removeMovieClip ( ) } //敵・アイテムの出現判定用のMCとの接触判定がない場合,出現判定をリセット,MCを削除
・各種地形などとの接触判定
・・地形との接触判定
処理の例は、以下の通りとなる。
ASのファイル:enemy_aramaki_ball.txt
#include "zero_AS/hit_landform/hit_floor.txt"
if ( hit_floor! =0 ) {
velocity_enemy_y=0
_parent ._y-=hit_y_floor //位置調整
}
上記の例では、床との接触判定を取得し、床との接触判定がある場合は、y方向の速度を0にして、位置調整を行っている。他の地形に関しても、類似した処理を行っている。
一部の敵は、ゼロと同様の処理を行っている。
ASのファイル:enemy_megaman.txt
#include "zero_AS/hit_landform/enemy_hit_landform_universal_1.txt"
・・ゼロとの接触判定
・頻出する処理
・・ゼロの方向を向く
ゼロとの位置関係によって敵の方向を変化させる 。
↓メガマンの例。ゼロに向かって振り向く。
ASのファイル:enemy_megaman.txt
if ( _root .zero_x < _parent ._x ) { enemy_direction=-1 } //ゼロの方向を向く
else { enemy_direction=1 }
・・ゼロとの距離
ゼロとの距離に応じて、処理を変化させる 。
↓モララーの例。前方・近距離にゼロがいる場合は、「パンチ前動作」に移行する。
ASのファイル:enemy_moralar.txt
if ( ( ( enemy_direction==1 and _root .zero_x > _parent ._x ) or ( enemy_direction==-1 and _root .zero_x < _parent ._x ) ) and Math .abs ( _root .zero_x -_parent ._x ) < =50 and Math .abs ( _root .zero_y -_parent ._y ) < =50 ) { //前方・近距離にゼロがいる場合
︙
}
・・ゼロとの角度の算出
↓ビッタアクアのハートの例。ゼロとの角度を算出し、その角度に速度が付加される。
ASのファイル:enemy_bitta_aqua_heart.txt
radian_enemy=Math .atan2 ( _root .zero_y -_parent ._y ,_root .zero_x -_parent ._x ) //角度を算出
velocity_enemy_x=1.5 * Math .cos ( radian_enemy) ;velocity_enemy_y=1.5 * Math .sin ( radian_enemy) //速度を付加
・・乱数でアクションを選択
↓ダークマターの例。乱数で「ショットに移行」「爆弾に移行」のいずれかが選択される。
ASのファイル:enemy_dark_matter.txt
enemy_random=Math .floor ( Math .random ( ) * 2 ) //乱数でアクションを選択
if ( enemy_random==0 ) { enemy_action="shot" } //ショットに移行
else { enemy_action="bomb" } //爆弾に移行
・・ガード判定
敵がガード状態の場合は、バスターの貫通を不可能とするために、「ガード判定」を付加する 。そして、
ガード状態ではなくなった場合は、「ガード判定」を解除する 。
バスター の消滅に関しては、
バスター の「・敵との接触判定」の「・・バスターの消滅判定」を参照。
↓シグマの例。処理を行わない場合。バスターが貫通する。
↓シグマの例。処理を行う場合。バスターの貫通が不可能となる。
ASのファイル:enemy_sigma.txt
if ( count_enemy_time==1 ) { enemy_guard=1 } //カウントが1の場合,ガード判定を付加
else if ( count_enemy_time==count_enemy_time_guard_max) { //カウントが最大値の場合
︙
enemy_guard=0 //ガード判定を解除
︙
}
・・ある程度透明化した場合、敵の攻撃のダメージを0にする
ある程度透明化した場合、敵の攻撃のダメージを0にする 。
↓ゼロ(敵)の炎の例。処理を行わない場合。視認し難いが、炎のMCが残っており、そのダメージを受けてしまう。
↓ゼロ(敵)の炎の例。処理を行う場合。
ASのファイル:enemy_zero_fire.txt
if ( _parent ._alpha< =20 ) { enemy_attack_damage=0 } //ある程度透明化した場合,敵の攻撃のダメージを0にする
・・初期に接触判定がある地形の情報の取得
「初期に接触判定がある地形」の情報の取得を行う 。また、それにより処理を変化させる 。
↓「カサカサの敵の出現用のhitrect」の配置の例。
↓カサカサの例。「初期に接触判定がある地形」により、処理(方向など)が変化する。
しかしキモいな…。
「初期に接触判定がある地形」が「床」の例を示す。他の地形に関しても、類似した処理を行っている。
ASのファイル:enemy_kasakasa.txt
#include "zero_AS/hit_landform/hit_floor.txt"
if ( hit_floor! =0 ) {
enemy_initial_landform="floor"
#include "zero_AS/hit_landform/hit_floor.txt"
_parent ._y-=hit_y_floor //位置調整
landform_xmin_initial=landform_xmin;landform_xmax_initial=landform_xmax
}
・「enemy_initial_landform」:初期に接触判定がある地形。
最終更新:2020年12月19日 09:23