2010年03月28日

魚群ホーミングの仕組み

前回作った中途半端なホーミングの仕組み。

まず、出現する敵とホーミングは配列に格納して管理しています。

弾はタイマーイベントを使い、一定間隔で発射。

マウスを押すと発射用のイベントリスナー登録
マウスを離すと発射用のイベントリスナー削除





今回はターゲット設定をシンプルに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フレームでの角度変更に最大値制限を設けたり
ターゲットを自分に一番近い敵にすれば
普通のホーミングっぽくなりそうです。


それらしくなったバージョン
.




posted by ケン at 15:58 | Comment(0) | TrackBack(0) | 実験 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。