無題
Posted: 2009年5月23日(土) 14:06
DXライブラリでRPGを作っています。
戦闘画面で、攻撃、魔法、防御、道具。
と選択肢を作り選べるようにしています。
一部抜き出して書いてみます。
これに関わるのを全て書くと長くなりますので、ところどころはしょってます。
省略した関数は
・main() //DXライブラリ初期化、裏画面処理とか一通り行わせて、battle()を呼び出してます。
・battle_gamen() //戦闘画面(背景、敵、自分、HP表示するための枠など)
・mc_command() //引数にコマンド選択関数(battle_choose)で受け取った数値を与え処理を行う。
・mahou_sentaku()//以下に記述しているbattle_chooseに中身はほぼ同じで、魔法を選ぶためのもの。
です。必要とあらば上記の関数の詳細も書き込みます。
<問題点>
コンパイルにエラーは出ず、
処理も思い通りに行われるのですが、
だんだん処理が重くなっていき、
次第には選択をできなくなっていきます。
最終的にはフリーズ。
処理開始後はスムーズに選択できているので、
ソースに問題があると思うのですがどなたか診断お願いします。
ってありますが、中身はbattle_choose関数の拡張版みたいなものです。
ほぼ同じ処理を行っています。
OS:Windows XP
メモリ:512MB
CPU:PentiumⅣ 2.0GHz
戦闘画面で、攻撃、魔法、防御、道具。
と選択肢を作り選べるようにしています。
一部抜き出して書いてみます。
これに関わるのを全て書くと長くなりますので、ところどころはしょってます。
省略した関数は
・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