描画速度の制御について

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

描画速度の制御について

#1

投稿記事 by platyくん » 14年前

現在、シューティングゲームを作っているのですが、描画回数が毎秒約13回になってます。これを60程にあげるにはどこをいじればいいですか?

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
draw_picture();//描画処理
Chara_move();//自機キャラを動かす
Weapon_shot();//弾を発射する
enemy_move();//敵を表示する(移動も)
hitflug();//当たり判定
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 描画速度の制御について

#2

投稿記事 by softya(ソフト屋) » 14年前

これだけだと直感で答えるしか無いですが、whileループ前に読み込みが見当たらないので毎フレーム画像を読み込んでませんか?
あとcodeタグを使ってくださいね。
http://dixq.net/board/board.html#k10
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: 描画速度の制御について

#3

投稿記事 by ISLe » 14年前

あとScreenFlipがあちらこちらにあるとか。

platyくん

Re: 描画速度の制御について

#4

投稿記事 by platyくん » 14年前

おそらく、毎回lordfileをしていたのが主原因だとおもわれ、原因は大体解決したのですが、一回だけlordする方法がいまいち分かりません。

コード:

//drawpictureで描画処理を行います
#include "DxLib.h"
#include "GV.h"
extern int Enemy;
extern int Bullet;
void lord_picture(){
    int Enemy =  LoadGraph("picture/enemy.png");
    int Bullet = LoadGraph("picture/bullet.png");//球の画像をロード
}
int draw_picture(){
    for(int k=0;k<20;k++){
	 if (enemy_live[k] == true){
	 DrawRotaGraph( enemy_x[k], enemy_y[k], 1.0, 0.0, Enemy, TRUE );
	  // x,y の位置に敵キャラを描画
	 }}

	 for(int j=0;j<30;j++){
		 if(shot_tyuu[j] == true){
	  DrawRotaGraph( bullet_x[j] , bullet_y[j], 1.0, 0.0, Bullet, TRUE ); 
	  // x,y の位置に弾を描画
		 }}
	  return 0;
	 }
と変更し、main関数で

コード:

#include "DxLib.h"
#include "GV.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
	lord_picture();//ここで画像をlordする。
		 while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
	draw_picture();//描画処理
       Chara_move();//自機キャラを動かす
	   Weapon_shot();//弾を発射する
	   enemy_move();//敵を表示する(移動も)
	   hitflug();//当たり判定
		 }
	DxLib_End(); // DXライブラリ終了処理
	return 0;
}
としたのですが、error LNK2001: 外部シンボル ""int Bullet" (?Bullet@@3HA)" は未解決です。 C:\Users\****\Desktop\shoothing\draw.obj
エラー 3 error LNK1120: 外部参照 2 が未解決です。 C:\Users\Shimoe\Desktop\ver.1.04様々な種類弾を使い分ける\Debug\GameProg.exe 1
などと表示されてしまいうまくいきません。どうすれば、一度で画像をlordできますか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 描画速度の制御について

#5

投稿記事 by softya(ソフト屋) » 14年前

グローバル変数にする必要は無いと思います。
extern int Enemy;
extern int Bullet;
他ファイルに公開する必要のない場合は、staticでしょう。
static int Enemy;
static int Bullet;

【補足】
ちなみにエラーの原因は
extern int Enemy;
は外部ファイルに別に変数の実体があるよという意味ですので、
int Enemy;
がmain関数のあるファイル側に必要です。
これをグローバル変数といいます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
LisetteLander
記事: 147
登録日時: 14年前
住所: 東京

Re: 描画速度の制御について

#6

投稿記事 by LisetteLander » 14年前

コード:

int game_status =0;
 while(1){
  switch(game_status){
   case 0:
    load();
    game_status=1;
   case 1:
//

//
  }
 }
こういう・・・?

platyくん

Re: 描画速度の制御について

#7

投稿記事 by platyくん » 14年前

おお!
秒60ループまで上がりました!!解決です^^
ご親切にありがとうございました。また、何かあったときは是非よろしくお願いします。

閉鎖

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