メインループで呼ぶ関数はその時の状況によって様々になるでしょう。
つまりメインループで呼ぶ関数を制御する必要があります。
そこで、func_stateなる変数を用意し、それに状態を示す値を代入し、それを元に条件分岐させてやりましょう。
func_state変数をグローバル変数として用意したいので、まずGV.hに追加します。
--GV.hに以下を追加-- GLOBAL int func_state;
ついでに次の節の準備をする為、初期化関数を用意しておきましょう。
--ini.cppに以下を追加-- void first_ini(){ }
メインループから呼ぶ関数を宣言する時はfunction.hにも書いてやるんでしたね。
--function.hに以下を追加-- GLOBAL void first_ini();
メインループでは用意したfunc_stateを元にしてswitch文で条件分岐してやります。
--main.cpp変更-- #define GLOBAL_INSTANCE #include "../include/GV.h" //ループで必ず行う3大処理 int ProcessLoop(){ if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す GetHitKeyStateAll_2();//現在のキー入力処理を行う return 0; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ ChangeWindowMode(TRUE);//ウィンドウモード if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化 while(ProcessLoop()==0){//メインループ switch(func_state){ case 0: load(); //データロード first_ini();//初回の初期化 func_state=100; break; case 100: graph_main();//描画メイン break; default: printfDx("不明なfunc_state\n"); break; } if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク ScreenFlip();//裏画面反映 } DxLib_End();//DXライブラリ終了処理 return 0; }
4節から実行結果は変わっていません。以前と同じように実行できれば成功です。
- Remical Soft -