再構築@シューティング

こんにちは。お久しぶりです。

しばらく、ご無沙汰していたので、今日から書いていこうかと思います。

今回は、先のシューティングを再構築したので、紹介?していこうとおもいます。

なぜ再構築したかというと、行き詰ったからです。
以下はメインループなのですが、

while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
        DebugControl(&screen);//画面デバッグモードで強制遷移
        Debug(&log,&screen);//トレース出力
        ClsDrawScreen();//画面クリア
        if(IsChangeScreen() == true){//画面切り替わる
            ChangeScreen();//値を変えて
            InitScreen(&screen);//値を元に画面を初期化
        }
        DrawScreen();//画面を描画
        ScreenFlip();//画面を反映
}

このままだと、トレースがうまくいかない・・・&関数まとめすぎちゃって(画面描画、デバッグ機能、画面遷移機能がmain.cに・・・)よくわからないことになったので、分離せねば!ということになりました。

その結果。

while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
        if(UpdateScreen(&screen) == 0){
            break;
        }
}


・・・スッキリ。減りすぎじゃない!?いえいえ、画面更新機能としてscreen.cへ移動しました。

screen.c

int UpdateScreen(Screen *screen){
    SceneControl(screen);//デバッグ用
    if(screen->update_screen == NO_UPDATE_SCENE){//画面を止めたい時
        return NOT_UPDATED;
    }
    if(IsChange(screen) == CHANGE_SCENE){//画面切り替えトリガ
        //画面遷移行う場合
        //>> screen->next_state = NEXT_SCENE_CODE
        if(ChangeState(screen) == INVALID_SCENE_STATUS){
            return SWITCH_FALED;
        }
        InitScene(screen);
        TransitionStart(screen);//遷移間フレーム未実装
        return SWITCH_SUCCESS;
    }
    Draw(screen);//描画
    return UPDATE_SUCCESS;
}

画面遷移周りの問題は、トランジションの実装の仕方です。
Flashならタイムラインにラベル貼って、次画面ラベルを保持しながらPlay()とかすると簡単にトランジションできるのですが、C言語はそうもいかず・・・
前画面と次画面への遷移ってどうするんだろう。クロスフェードとか難しそう。


次にファイル読み込みバッファの問題。
スクリプトを読み込んでいるのですが、ファイル読み込みロジックとコマンド生成ロジックが分離できずにそのまんまです。あと、スクリプトファイルがめっちゃ大きい時とかどうしよう。
ファイル読み込みのバッファの実装が苦労しますね。


あとは、肝心のゲーム画面。敵と見方と弾の描画はいままでどおりOK。配列に格納して配列の最大数分ループして座標変えています。
書籍読んでいると、タスク・・・あとでにします。
スクリプトを反映させて、敵の攻撃パターンを作ったら当たり判定ですね。


休日がっつりPGしていきまう