!!8/2 electronに対応させた。 OP画像をGIMPでセピア色に加工し、元ネタへ近づけた。 敵の攻撃パターンを増やしたり、隠しボスを追加したりした。クラス化、モジュール化がうまくいっていたおかげで、変更は最小限かつ見やすい形で済んだ。 ゲームオーバー画面の表示がうまく行かないバグを修正した。丸一日原因がわかっていなかったバグだった。 その他バグフィックス等々。新機能追加はバグの追加であるということを痛感した。 個人個人で作成していたBGM処理を統合し、煩雑だったBGM切り替え処理を1行で行えるように改造した。 !!8/1 各モジュールでの数値のやりとりを簡単にするためにグローバル変数の仕様を班で策定。これにより以下の統合処理が可能になった。 敵の攻撃力と自分の防御力をダメージ計算に使うようになった。 敵の種類に応じて戦闘時に出てくる画像を変化させるようにした。 !!7/31 直進する弾の発射角度を変更できるようにした。今まで真下にしか飛んでいなかったが、これで複雑な制御が出来るようになった。 sceneを使わずにオブジェクトを一括で表示したり消したりする方法を見つけたので、sceneを削除した。 今思うとenchant.Groupで良かったような気もする。 !!7/27 枠からプレイヤーや弾が出ないようにした。弾は消せばいいがプレイヤーを消すわけにはいかないので、プレイヤーの移動メソッドに少々工夫を加えた。 結果的に面白い動きになったと思う。 !!7/5 enchantのfpsカウンターを用いたタイマーを作った。戦闘システムの終了タイミングの計測に利用している。 !!7/20 配列を用いたオブジェクト管理法ページ公開 >>{18::gr04::Sceneを使わないオブジェクトの管理方法}{7/20 Sceneを使わないオブジェクトの一括管理方法} !!6/29 atomエディタからgitを利用する方法を班で共有した。これ以降班でのgitの利用が極めて活発になり、開発が楽になった。 !!6/13 ソース分割法を公開 >>{18::gr04::ソース分割}{6/14 ソース分割} これにしたがってソースを分割し、他の班員のコードから戦闘システムを1行で呼び出せるようにした。 プロトタイプ作成 !!担当 ・戦闘シーン !!(重要なものだけ)モジュール説明 自分の担当モジュールはシューティングゲーム部分。 battle.jsをhtmlで読み込んで、Shooting_part();と記述すると敵の攻撃が始まり、5秒経つと制御を返す。 !Shooting_part(); プレイヤーインスタンスや、弾が画面外に飛び出さないようにする枠などの様々なオブジェクトを出現させる。 新しいシーンを出現させるのが普通のやり方だが、それでは下のシーンが停止してしまうため配列とfor in文を利用して既存シーンにオブジェクトをまとめて出したり消したりしている。 現在のenemyidに応じて敵にどんな攻撃をさせるかをif文で制御している。 !ongrid(target, mode="bullet"); 関数は枠の中にオブジェクトが入ってるかを判定する関数である 基本的に敵の弾に用いるもので、枠の外に出ると弾が消える処理に使うが、modeを変えることでプレイヤーなどを指定することも可能。実際にプレイヤーが壁から出ないように制御するために使っている。 !TestGroup(x, y); Groupオブジェクトである 中にはSpriteが2つ入っていて、片方を見た目用、もう片方を当たり判定専用にすることが可能であり、弾幕STGに不可欠な「極端に見た目より小さい当たり判定」等が実現できる !Player(x, y); TestGroupを継承した、プレイヤーのクラスである。 この中に、自分の体力が0になったらゲームオーバーにする処理を行う文がある。 また、壁の外に出たら進んだ分の逆方向に2倍進むようになっているので、跳ね返るような独特な挙動になる !Bullet(x, y); 弾の基本クラスである。x,yで出現する座標を指定できる。これ単体で使うものではない !StraightBullet(x, y, angle); Bulletを継承。 指定した角度に向かってまっすぐ飛ぶ弾 一回攻撃が当たったら1秒間は無敵状態になる処理も記述している。 muteki_flag変数を1に変更し、setTimeoutで0に変更する関数を1秒遅延させて実現している。 !HomingBullet(x, y, target); プレイヤーに向かって飛んでくる。いわゆる自機狙い弾。 target引数にはPlayerオブジェクトを指定する。 !Bgm();BGM再生に使うクラスで、ゲーム全体でインスタンスは1つだけで運用する。 Bgm.set(data);で再生ファイルを指定したり、Bgm.loop();でループ処理を簡単に出来る。 BGMの入れ替えには4行くらい必要だったのだが、Bgm.change(data);を作成し、1行でBGMを変更出来るようにした。