無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
やっくん

無題

#1

投稿記事 by やっくん » 16年前

DXライブラリでRPGを作っています。
戦闘画面で、攻撃、魔法、防御、道具。
と選択肢を作り選べるようにしています。
一部抜き出して書いてみます。
これに関わるのを全て書くと長くなりますので、ところどころはしょってます。
省略した関数は
・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

やっくん

Re:無題

#2

投稿記事 by やっくん » 16年前

タイトル書き忘れてました(^^;)
すみません。

それと追記です。
重くなる原因を自分なりに考えてみたところ、
画像を何回も読み込んでるのも関わってるかもしれない。
ってことで、画像を呼び出してる関数も載せてみます。
battle_gamen(){

	 int image0;                               //ハンドルを受け取るためのint型変数を宣言
          image0 = LoadGraph( "dat/battle_map/field_d.jpg" ) ;       //char.pngのハンドルを代入
          DrawGraph( 0 , 0 , image0 , FALSE ) ;      //画像を表示


          int image1;                               //ハンドルを受け取るためのint型変数を宣言
          image1 = LoadGraph( "dat/enemy/pr_enemy.png" ) ;       //char.pngのハンドルを代入
          DrawGraph( 110 , 250 , image1 , TRUE ) ;      //画像を表示
 
          DrawGraph( 410 , 250 , mc.image[7] , TRUE ) ;      //画像を表示

          DrawBox( 10, 480 - 130, 640 - 11, 480 - 11, GetColor( 0,0,128 ), TRUE ) ;
          DrawBox( 10, 480 - 130, 640 - 11, 480 - 11, GetColor( 255,255,255 ), FALSE ) ;
          //ScreenFlip();//裏画面反映

}

Justy

Re:無題

#3

投稿記事 by Justy » 16年前


>画像を何回も読み込んでるのも関わってるかもしれない

 まさに原因はそれでしょう。
 1度だけ呼び出すようにすれば、解決するかと。

やっくん

Re:無題

#4

投稿記事 by やっくん » 16年前

Justyさん
回答ありがとうございます。
パソコンが悪いかと思って買い換えるところでした(笑”
どうにかがんばって一回呼び出すだけにできるようにしてみます。

閉鎖

“C言語何でも質問掲示板” へ戻る