その2

システム基盤が出来上がった所で、まず自機の設定を作ってみます。


サイズ  → 絵が32*64で、当たり判定はその半分くらい(後で調整)
攻撃手段 → 威力△連射◎な通常弾と、威力◎連射×+移動速度半分になるレーザー弾
生命管理 → 1Hit-Deathのライフ制
アイテム → 連射速度や威力が向上


次に敵、敵弾のパターンを作成します。
インターフェースにパターンを記述し、派生クラスで組み合わせて使用します。


・敵パターン
移動      → 固定、直進、右回りの弧、左回りの弧
移動先座標   → 固定以外
移動速度    → 一回の移動量
移動後ディレイ → 移動完了後に待機する時間

弾の生成    → 無し、回転砲台、ショットガン
弾の方向    → 始点+終点、プレイヤー方向
弾の方向変化率 → 始点=0、終点=360、変化度=10の場合360/10で36個生成
弾の生成ディレイ→ 生成1回完了後に待機する時間(大きくして1発しか撃たない等)。

・弾パターン
移動      → 固定、直進、ホーミング
移動速度    → 一回の移動量
移動後ディレイ → 移動完了後に待機する時間

各項目はタスクリストに入れていく。例えば
 移動.add(直進, 固定, 直進);
 弾の生成.add(回転砲台, ショットガン, ショットガン);
 弾の方向.add(0度, プレイヤー方向, 180度);
 弾の生成頻度.add(10, 0, 0); // ショットガンはディレイ0なので同時に発射

http://d.hatena.ne.jp/nepo_n/20100221 もあるしBulletMLを実装した方が早くて楽なんではとか思ってしまった(´ω`)

パターンの組み合わせ

弾の花を作るには、ショットガンを組み合わせる。
(回転砲台自体もショットガンで表現)


// 1回転1砲台を表現
for(int i=0; i<360; ++i) {
task.add(ショットガン生成, 開始方向→i度, 終了方向→i度, 変化率→1度);
}

// 1回転4砲台を表現(上下左右から回転。卍のような形)
for(int i=0; i<360; ++i) {
task.add(ショットガン生成, 開始方向→i度, 終了方向→i+360度, 変化率→90度);
}

さらに弾の定義で、ある座標まで進むと上下に分裂したり、速度/方向を変えると色々なパターンができる。