戦闘画面で、攻撃、魔法、防御、道具。
と選択肢を作り選べるようにしています。
一部抜き出して書いてみます。
これに関わるのを全て書くと長くなりますので、ところどころはしょってます。
省略した関数は
・main() //DXライブラリ初期化、裏画面処理とか一通り行わせて、battle()を呼び出してます。
・battle_gamen() //戦闘画面(背景、敵、自分、HP表示するための枠など)
・mc_command() //引数にコマンド選択関数(battle_choose)で受け取った数値を与え処理を行う。
・mahou_sentaku()//以下に記述しているbattle_chooseに中身はほぼ同じで、魔法を選ぶためのもの。
です。必要とあらば上記の関数の詳細も書き込みます。
<問題点>
コンパイルにエラーは出ず、
処理も思い通りに行われるのですが、
だんだん処理が重くなっていき、
次第には選択をできなくなっていきます。
最終的にはフリーズ。
処理開始後はスムーズに選択できているので、
ソースに問題があると思うのですがどなたか診断お願いします。
//元になる関数 battle(){ int command,return_command; while(!ProcessMessage() && !ClearDrawScreen()){ battle_gamen();//戦闘画面描画 //選択肢を表示しEnterが押された所の命令を保存 command = command_choose(); //↑の選択でcommandに受け取った命令を引数に処理を分岐。 return_command = mc_command(command); } } //選択画面の関数 int command_choose(void){ int y = 360; int Key[256]; int White = GetColor(255,255,255); //色取得 // && GetHitKeyStateAll_2(Key)==0 while(!ProcessMessage() && !GetHitKeyStateAll_2(Key) && !ClearDrawScreen() && !Key[KEY_INPUT_ESCAPE]){ battle_gamen(); //戦闘画面描写 //選択画面 DrawString( 30 , y , "●" , White ); DrawString( 50 , 360 , "攻撃" , White ); DrawString( 50 , 380 , "魔法" , White ); DrawString( 50 , 400 , "防御" , White ); DrawString( 50 , 420 , "道具" , White ); DrawString( 50 , 440 , "逃げる", White ); //キーが下を押されたら●を下に移動 if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){ y+=20; if(y==460){ y=360; } } //キーが上を押されたら●を上に移動 else if( Key[KEY_INPUT_UP]==1 ||( Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){ y-=20; if(y==340){ y=440; } } //選択:攻撃 else if(y == 360 && Key[KEY_INPUT_RETURN]==1) return 1000; //選択:魔法 else if(y == 380 && Key[KEY_INPUT_RETURN]==1){ return mahou_sentaku(); //更に魔法選択を呼び出し、選ばせる。 } ScreenFlip();//裏画面反映 } }ちなみに赤字で書いてる「更に魔法選択肢を呼び出し、選ばせる」
ってありますが、中身はbattle_choose関数の拡張版みたいなものです。
ほぼ同じ処理を行っています。
OS:Windows XP
メモリ:512MB
CPU:PentiumⅣ 2.0GHz