ページ 1 / 1
描画速度の制御について
Posted: 2011年10月26日(水) 15:24
by platyくん
現在、シューティングゲームを作っているのですが、描画回数が毎秒約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;
}
Re: 描画速度の制御について
Posted: 2011年10月26日(水) 16:07
by softya(ソフト屋)
これだけだと直感で答えるしか無いですが、whileループ前に読み込みが見当たらないので毎フレーム画像を読み込んでませんか?
あとcodeタグを使ってくださいね。
http://dixq.net/board/board.html#k10
Re: 描画速度の制御について
Posted: 2011年10月26日(水) 17:58
by ISLe
あとScreenFlipがあちらこちらにあるとか。
Re: 描画速度の制御について
Posted: 2011年10月26日(水) 21:14
by platyくん
おそらく、毎回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できますか?
Re: 描画速度の制御について
Posted: 2011年10月26日(水) 21:27
by softya(ソフト屋)
グローバル変数にする必要は無いと思います。
extern int Enemy;
extern int Bullet;
他ファイルに公開する必要のない場合は、staticでしょう。
static int Enemy;
static int Bullet;
【補足】
ちなみにエラーの原因は
extern int Enemy;
は外部ファイルに別に変数の実体があるよという意味ですので、
int Enemy;
がmain関数のあるファイル側に必要です。
これをグローバル変数といいます。
Re: 描画速度の制御について
Posted: 2011年10月26日(水) 22:00
by LisetteLander
コード:
int game_status =0;
while(1){
switch(game_status){
case 0:
load();
game_status=1;
case 1:
//
//
}
}
こういう・・・?
Re: 描画速度の制御について
Posted: 2011年10月28日(金) 11:21
by platyくん
おお!
秒60ループまで上がりました!!解決です^^
ご親切にありがとうございました。また、何かあったときは是非よろしくお願いします。