FPS設定
Posted: 2010年7月30日(金) 17:38
FPSを制御しようとして、龍神録プログラミングの館の43を参考に(というかほぼぶち込み)して
自分のプログラムに組み込んだら、エラーは出ないんですけど、画面に何も出力されなくなって
しまいました。
FPS関数を組み込む前には描画されてたものも描画されなくなってしまったので、
どこかで無限ループが起きてると思うのですが、自分で見てみてもよく分かりません。
変なコメントしてるのは、こうでもしないと見にくいためです。
環境はBCC Developerです。 返答お願いします。
自分のプログラムに組み込んだら、エラーは出ないんですけど、画面に何も出力されなくなって
しまいました。
FPS関数を組み込む前には描画されてたものも描画されなくなってしまったので、
どこかで無限ループが起きてると思うのですが、自分で見てみてもよく分かりません。
変なコメントしてるのは、こうでもしないと見にくいためです。
環境はBCC Developerです。 返答お願いします。
#include "DxLib.h"
#define FLAME 60
//宣言////////////////////////////////////////////////////////////////////////////////////////
char Key[256];
int Graph=LoadGraph("Ziki.png");
int X=320,Y=400;
int color=GetColor(255,255,255);
int fps_count,count0t; //fpsのカウンタ、60フレームに1回基準となる時刻を記録する変数
int f[FLAME]; //平均を計算するため60回の1周時間を記録
double ave; //平均fps
//宣言終//////////////////////////////////////////////////////////////////////////////////////
//FLAME fps になるようにfpsを計算・制御
void fps_wait(){
int term,i,gnt;
static int t=0;
if(fps_count==0){//60フレームの1回目なら
if(t==0)//完全に最初ならまたない
term=0;
else//前回記録した時間を元に計算
term=count0t+1000-GetNowCount();
}
else //待つべき時間=現在あるべき時刻-現在の時刻
term = (int)(count0t+fps_count*(1000.0/FLAME))-GetNowCount();
if(term>0)//待つべき時間だけ待つ
Sleep(term);
gnt=GetNowCount();
if(fps_count==0)//60フレームに1度基準を作る
count0t=gnt;
f[fps_count]=gnt-t;//1周した時間を記録
t=gnt;
//平均計算
if(fps_count==FLAME-1){
ave=0;
for(i=0;i<FLAME;i++)
ave+=f;
ave/=FLAME;
}
fps_count = (++fps_count)%FLAME ;
}
//x,yの位置にfpsを表示
void draw_fps(int x, int y){
if(ave!=0){
DrawFormatString(x, y,color,"[%.1f]",1000/ave);
}
return;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SetDrawScreen(DX_SCREEN_BACK);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
fps_wait();
draw_fps(0,465);
DrawGraph(X,Y,Graph,TRUE);
ScreenFlip();
}
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
WaitKey() ; // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}