前回作った
中途半端なホーミングの仕組み。
まず、出現する敵とホーミングは配列に格納して管理しています。
弾はタイマーイベントを使い、一定間隔で発射。
マウスを押すと発射用のイベントリスナー登録
マウスを離すと発射用のイベントリスナー削除
今回はターゲット設定をシンプルに0番目の敵にしています。
enemyMcListという敵の参照を格納した配列の0番目
enemyMcList[0]がターゲットです。
敵は出現した順番に配列の後ろに追加されていき、
破壊されるとその要素番号は削除されて詰められます。
なので、今回は画面上で一番古い敵が毎回ターゲットになります。
弾の移動処理の中身は以下のような感じですが
ラジアン値から度数法に変換してさらにそれを使ってと
物凄く回りくどい事してると思ふ・・・
//ターゲットが存在するか確認します
//敵の配列は2階層上で管理してます。
var parentObject2:Object=Object(parent.parent);
if(parentObject2.enemyMcList[0] != null){
//敵0番との角度調査
敵との角度をラジアン値で求めて変数radに入れています
var dx = parentObject2.enemyMcList[0].x - this.x;
var dy = parentObject2.enemyMcList[0].y - this.y;
rad = Math.atan2(dy ,dx);
//上記のラジアン値を元に度数法の角度を出し、
//弾MCの向きを決めています。+90ってのは調整です。
this.rotation = rad*180/Math.PI+90;
//斜めに30移動する際のX座標移動量、Y座標移動量を求めます
//-90ってのは調整です。
this.x += Math.cos((this.rotation-90) * Math.PI / 180)*30;
this.y += Math.sin((this.rotation-90) * Math.PI / 180)*30;
}else {
//敵が居ない場合は画面上部に向かって飛ぶようにします
this.rotation = 0;
this.y -= 30;
}
//画面外から出たら消す処理をします
//shot_remove()は自分を消す処理をまとめた関数です。
if (this.y < -10 || this.y >610 || this.x<-10 || this.x>610) {
shot_remove()
}
上記の内容をベースに
1フレームでの角度変更に最大値制限を設けたり
ターゲットを自分に一番近い敵にすれば
普通のホーミングっぽくなりそうです。
それらしくなったバージョン.