プログラムは問題なく動くので、説明しやすいように龍神録プログラミングの館のプログラムを例にしたいと思います。
9章 メインループで呼ぶ関数を制御してみよう
--GV.hに以下を追加-- このプログラムの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;
}
ループ1回目が行われる時、func_stateは何故0なのでしょうか。
どこかで初期化をしたわけではないようで分かりません。
自分が作っているゲームでも同じループ方法を採っていますが、上のプログラムで言うと20行目の でfunc_stateにあたる変数を初期化しています。
ですが、この関数が実行(func_stateが初期化)される前にswitchで行き先が決められているはず。だけど、その時には初期化されてない。
宣言時に とするとエラーが出てしまいますし、勝手に0にされるものなのでしょうか?