ファイル分割&ロックオン@シューティング
おはようございます
今日は、”ファイル分割”と”ロックオン機能を実装”しました。
ファイル分割ですが、今まで一つのフォルダに入れてしまってよくわからない状態になっていたこともあってこの際ファイル化して階層?にしてみました。
ゲーム画面や内部処理もgame.cに集中していましたし。
ファイルごとに機能や役割?を考えるのは最近知ったことなので、悩んでしまいます。特に関数仕様とかコードのわかりやすいさ?を考え出すと、抜けられない迷宮入り的な感覚です。なので、今回は(毎度?)あまり考えずがばっと分けました。
結果的には、以前、こうだったものが。
こうなりました。
ゲーム画面特有のものを"フィルタ"の中に入れて、他画面でも使えそうな描画系をimageUtilとして外にだしました
フィルタってフォルダではなくて、"編集上便利なもの"的な使い方なのでしょうか。
ソースのフォルダを見ても、フォルダに分かれている状態ではなかったです。
次にロックオン機能です。
これは自機前方に表示されている十字マークに敵を合わせると、ホーミング弾の的として登録される機能です。
手順はー
敵のポインタリストを宣言して、十字マークらへんに当たり判定を持ってきて、以前に同じ敵をリストに登録していなければ、登録。
最後の同じ敵チェックをしておかないと、毎フレーム登録されて、ホーミング弾を撃った時にエライことになります。
ロックオンの関数は以下のようになってます。
ええと。。。とても冗長な処理になっています。何かいい方法はないでしょうか。
int lockon(Enemy* enemy){ int index; //同じ敵がいないかチェック for(index = 0;index < MAX_TARGET_ENEMY_NUM;index++){ if(enemy_targets[index] == enemy){ return FALSE;//以前同じ敵を指定していれば、処理しない } } //敵アドレスを差し込む for(index = 0;index < MAX_TARGET_ENEMY_NUM;index++){ if(enemy_targets[index] == NULL){ enemy_targets[index] = enemy; return TRUE; } } return FALSE; }
ちなみに、ホーミング弾を撃った時点で敵リストを消去しようと思っています。
現在の画面↓
ちゃんと過不足なくロックオンされてます!→右下のログ注目
よし、ホーミング弾処理機能にとりかかろう。