fps60にしたい
fps60にしたい
http://dixq.net/rp/43.html
//fps
#define FLAME 60
//fpsのカウンタ、60フレームに1回基準となる時刻を記録する変数
int fps_count,count0t;
//平均を計算するため60回の1周時間を記録
int f[FLAME];
//平均fps
double ave;
============以下略===============
管理人様のfpsを60に制御するプログラムなんですが
DXライブラリでこのプログラムを一般化して使うのは可能でしょうか?変数はすべて
定義しましたが、エラーがでます。メインは以下のようにしました。
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){
draw_fps(0,0);
fps_count++;
ScreenFlip();
fps_wait();
}
//fps
#define FLAME 60
//fpsのカウンタ、60フレームに1回基準となる時刻を記録する変数
int fps_count,count0t;
//平均を計算するため60回の1周時間を記録
int f[FLAME];
//平均fps
double ave;
============以下略===============
管理人様のfpsを60に制御するプログラムなんですが
DXライブラリでこのプログラムを一般化して使うのは可能でしょうか?変数はすべて
定義しましたが、エラーがでます。メインは以下のようにしました。
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){
draw_fps(0,0);
fps_count++;
ScreenFlip();
fps_wait();
}
Re:fps60にしたい
一般化とはどのようなことを指しているか明確にしてください。
また、上記だけではエラーが出ますと言われても、何のエラーなのかもわからないので、
詳細の追記をよろしくお願いします。
また、上記だけではエラーが出ますと言われても、何のエラーなのかもわからないので、
詳細の追記をよろしくお願いします。
Re:fps60にしたい
勿論出来ますよ^^
一般化というのは龍神録のプログラムでだけでなく自分のプログラムにもササっと導入できるようにするって事ですかね?
見た感じ問題なさそうですが、エラーが出るならそのメッセージを教えてください
一般化というのは龍神録のプログラムでだけでなく自分のプログラムにもササっと導入できるようにするって事ですかね?
見た感じ問題なさそうですが、エラーが出るならそのメッセージを教えてください
Re:fps60にしたい
一般化とは単にDXライブラリで表示させるだけです。
エラーは
ポップアップで
Debug Assertion Failed
File\なんたら\printf.c
Line55
Expression( str!=NULL)
です。よろしくお願いします。環境はVC++EEです。
エラーは
ポップアップで
Debug Assertion Failed
File\なんたら\printf.c
Line55
Expression( str!=NULL)
です。よろしくお願いします。環境はVC++EEです。
Re:fps60にしたい
Debug Assertion Failed!
Program:...
File:fprintf.c
Line:55
Expression:(str!=NULL)
For information on how your program can cause an assertion failure,see the Visual C++ documentation on asserts
って浮かび上がります。私がファイルの定義が分からないからだと
思います。
下のかたのmouseさんとまったく同じものです。
ttp://homepage1.nifty.com/MADIA/vc/vc_bbs/200801/200801_08010003.html
Program:...
File:fprintf.c
Line:55
Expression:(str!=NULL)
For information on how your program can cause an assertion failure,see the Visual C++ documentation on asserts
って浮かび上がります。私がファイルの定義が分からないからだと
思います。
下のかたのmouseさんとまったく同じものです。
ttp://homepage1.nifty.com/MADIA/vc/vc_bbs/200801/200801_08010003.html
Re:fps60にしたい
printfの警告がでたので
fprintf(fp,"%d:%d\n",fps_count,term);
if(fps_count==600)
fclose(fp);
の部分をとったらコンパイルでき動きましたけど
fpsが250とか・・・
私には分からないですね。分かる人がいたらよろしく
お願いいたします。
fprintf(fp,"%d:%d\n",fps_count,term);
if(fps_count==600)
fclose(fp);
の部分をとったらコンパイルでき動きましたけど
fpsが250とか・・・
私には分からないですね。分かる人がいたらよろしく
お願いいたします。
Re:fps60にしたい
Expression:(str!=NULL)
警告の通り、文字列操作がうまく行っていないのでしょう。
表示させている部分を含む、FPS関数を載せてください。
警告の通り、文字列操作がうまく行っていないのでしょう。
表示させている部分を含む、FPS関数を載せてください。
Re:fps60にしたい
ちょっと長くなりますが
//fps
#define FLAME 60
//fpsのカウンタ、60フレームに1回基準となる時刻を記録する変数
int fps_count,count0t;
//平均を計算するため60回の1周時間を記録
int f[FLAME];
//平均fps
double ave;
File *fp;//私が加えたもの
//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();
fprintf(fp,"%d:%d\n",fps_count,term);
if(fps_count==600)
fclose(fp);
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[0],"[%.1f]",1000/ave);
}
return;
}
をヘッダーに書いて上のメインファイルで関数として使ってます。
警告文は上の通りです。
ちなみにhttp://dixq.net/g/#s6の方はうまくいっています。
//fps
#define FLAME 60
//fpsのカウンタ、60フレームに1回基準となる時刻を記録する変数
int fps_count,count0t;
//平均を計算するため60回の1周時間を記録
int f[FLAME];
//平均fps
double ave;
File *fp;//私が加えたもの
//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();
fprintf(fp,"%d:%d\n",fps_count,term);
if(fps_count==600)
fclose(fp);
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[0],"[%.1f]",1000/ave);
}
return;
}
をヘッダーに書いて上のメインファイルで関数として使ってます。
警告文は上の通りです。
ちなみにhttp://dixq.net/g/#s6の方はうまくいっています。
Re:fps60にしたい
>Mistさん
私は
fprintf(fp,"%d:%d\n",fps_count,term);
if(fps_count==600)
fclose(fp);
の部分を取ってしまいました。
仮にするならどこが適切ですか?お願いします。
私は
fprintf(fp,"%d:%d\n",fps_count,term);
if(fps_count==600)
fclose(fp);
の部分を取ってしまいました。
仮にするならどこが適切ですか?お願いします。
Re:fps60にしたい
やりたい事がわかりました^^;
ファイルに前フレームの時間を保存して、
それを使ってfpsを制御しようとしてたのですね。
勘違いしてました、自分の上の書き込みは無しで。
寝ぼけてました、スミマセン・・・。
値を保持したいのであればstatic変数を用いれば良いです。
ファイルに前フレームの時間を保存して、
それを使ってfpsを制御しようとしてたのですね。
勘違いしてました、自分の上の書き込みは無しで。
寝ぼけてました、スミマセン・・・。
値を保持したいのであればstatic変数を用いれば良いです。
Re:fps60にしたい
fprintf(fp,"%d:%d\n",fps_count,term);
if(fps_count==600)
fclose(fp);
消すと実行できるんですけどfps150くらいでるんです。
staticで
static int term,i,gnt;
としても結果は同じでした。
if(fps_count==600)
fclose(fp);
消すと実行できるんですけどfps150くらいでるんです。
staticで
static int term,i,gnt;
としても結果は同じでした。
Re:fps60にしたい
ave=0; for(i=0;i<FLAME;i++) ave+=f; ave/=FLAME; }
この部分を
ave=0; for(i=0;i<FLAME;i++) ave+=f; } ave/=FLAME;
このように変更してみてはどうでしょう?
Re:fps60にしたい
インデント直すので失敗してました。
#define FLAME 60 //fpsのカウンタ、60フレームに1回基準となる時刻を記録する変数 int fps_count,count0t; //平均を計算するため60回の1周時間を記録 int f[FLAME]; //平均fps double ave; File *fp;//私が加えたもの //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(); fprintf(fp,"%d:%d\n",fps_count,term); if(fps_count==600) fclose(fp); 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[0],"[%.1f]",1000/ave); } return; }
Re:fps60にしたい
Debug Assertion Failed!
Program:...
File:fprintf.c
Line:55
Expression:(str!=NULL)
先程張り付けてコンパイルしましたが
上の結果でした。いやみじゃないんですが・・・
Program:...
File:fprintf.c
Line:55
Expression:(str!=NULL)
先程張り付けてコンパイルしましたが
上の結果でした。いやみじゃないんですが・・・
Re:fps60にしたい
上のは最初のソースをインデントを直しただけのものです。
つまり、最初のエラーが出てるままです。
自分の持ってるソースを持ってくれば、動くでしょうが、
提示されているソースをなんとか直して動かしたいと・・・・。
とりあえず、動くものを^^;
つまり、最初のエラーが出てるままです。
自分の持ってるソースを持ってくれば、動くでしょうが、
提示されているソースをなんとか直して動かしたいと・・・・。
とりあえず、動くものを^^;
Re:fps60にしたい
ありがとうございます。しかし、fpsを60に制御するとなにも
かもカクカクになってしまします。
この原因はなんなのでしょうか?
fpsを制御しないと普通にアニメーションするんですが・・・・
かもカクカクになってしまします。
この原因はなんなのでしょうか?
fpsを制御しないと普通にアニメーションするんですが・・・・