ページ 1 / 1
fpsについて
Posted: 2009年10月16日(金) 19:29
by EXTRL
ゲームプログラミングの館のs7節の「fpsを表示する。」の
サンプルプログラム(コピペ用)をエディタ(?)に丸写しして
実行すると、表示されるfpsが30前後(単位「fps」付き)になります。
しかも、館に載っている実行結果は一行ですが、
自分の実行画面は、その下に30ms前後の数字(単位付き)が表示されます。
これは自分のPC設定がおかしいんでしょうか? それともこんなもんなんでしょうか。
OS(?)はWindowsVistaです。 コンパイラはBorland+BCC Developerです。
返答お願いします。 不足があれば付け足します
Re:fpsについて
Posted: 2009年10月16日(金) 22:19
by softya
60fpsの設定で30fps前後なら、CPUとGPUの問題かも知れません。
どのようなパソコンをお使いでしょうか?
>しかも、館に載っている実行結果は一行ですが、
確かに画面は一行ですが、ソースコードを見る限りは2行ですよね。
こう書いてあるので
DrawFormatString(0, 0,GetColor(255,255,255),"%.1fFPS",1000.0/(double)ave);
DrawFormatString(0,20,GetColor(255,255,255),"%dms" ,ave)
これだと2行出ないとおかしいです。
Re:fpsについて
Posted: 2009年10月17日(土) 12:13
by KEYONN_
EXTRLさんへ
ディスプレイのリフレッシュレートが関係しているかもしれません。
ディスプレイのリフレッシュレートは、60Hzですか?
他のゲームでも、30FPS程度しか出ませんか?
このソースをビルドして実行してください。
スペースキーでScreenFlip()を実行する/しないを変更できます。
ScreenFlip()を実行しない状態でFPSが
どれくらい出るのか試してみてください。
#include"DxLib.h"
int FPScount=0;
int FPSLimitFlag=0;
void LimitOnOff()
{
static int prekey;
if(!prekey && CheckHitKey(KEY_INPUT_SPACE))
{
FPSLimitFlag^=1;
}
prekey=CheckHitKey(KEY_INPUT_SPACE);
}
bool SetFPS(int SleepTime)
{
static long int PreTime=0;
if( (PreTime + SleepTime<=GetTickCount()))
return false;
else
{
do{
}while(GetTickCount() < (PreTime + SleepTime));
return true;
}
PreTime = GetTickCount();
}
void ShowFPS()
{
static long int time=GetTickCount();
static int FPS=0;
if(GetTickCount()-time>1000)
{
time=GetTickCount();
FPS=FPScount;
FPScount=0;
}
//printf("FPS=%d\n",FPS);
DrawBox( 0 , 0 , 60 , 20 ,
GetColor(255,0,0) , TRUE ) ;
DrawFormatString( 0 , 0 , GetColor(255,255,255) ,
"FPS=%d" , FPS ) ;
char str[100];
sprintf(str,"TestFPS:fps=%d",FPS);
SetMainWindowText(str);
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE );
SetGraphMode(640,480,32);
SetMainWindowText("TestFPS");
//データ読み込み中と表示する
DrawString( 0 , 0 , "データ読み込み中" , GetColor(255,255,255) );
//乱数の初期化
srand(GetTickCount());
if(DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
while(ProcessMessage()==0 && ClearDrawScreen()==0){
FPScount++;
ShowFPS();
SetFPS(1000/60);
LimitOnOff();
if(FPSLimitFlag==1)
ScreenFlip();
}
DxLib_End();
return 0;
}
Re:fpsについて
Posted: 2009年10月17日(土) 12:22
by toyo
DxLib_Init()の前に
SetWaitVSyncFlag( FALSE );
を入れたらいいかも
Re:fpsについて
Posted: 2009年10月17日(土) 14:12
by EXTRL
>softyaさん
どのようなパソコンと言われてもあまりよく分かりません;
リフレッシュレートは、ググった所、使ってるPCは液晶なので多分変更は出来ないと思います。
ただ、使ってるPCはデスクトップで、買ってから1年ちょっとぐらいです。
メモリ(?)は、ローカルディスクCはもともと50GBありますが、残りの容量は700MB切ってます。
Dの方は150GB以上あります。
>TKOZさん
実行したところ、大体250~300あたりを行ったり来たりしてます。
スペースで表示したとたんに30あたりになります。
このことから多分PC自体のリフレッシュレートは60以上あると思います。
>toyoさん
やってみましたが、実行結果は変わりませんでした。
Re:fpsについて
Posted: 2009年10月17日(土) 14:37
by softya
結果を見る限り描画が遅いのは間違いなさそうです。
となるとGPU(描画機能)が貧弱なのかもしれません。
それにしても遅い気がするのですが・・・。
パソコンのメーカー名と型番を教えてください。
それで分かります。
>メモリ(?)は、ローカルディスクCはもともと50GBありますが、残りの容量は700MB切ってます。
それは、HDD(ハードディスク)容量ですね。
メモリ容量やCPUは別の項目です。
コントロールパネルのシステムとメンテナンスを選んで、RAMの量とプロセッサ速度の表示を選んでください。これでRAM容量等を知る事ができます。
表示される項目のうち、
評価:
プロセッサ:
メモリ(RAM):
の項目を書き出してください。
ちなみに私のノートパソコン(DELL)だと
評価:2.9
プロセッサ:AMD Turion(tm) 64X2 Modile Tecnology TL-50 1.60GHz
メモリ(RAM):2.00GB
と表示されます。
Re:fpsについて
Posted: 2009年10月17日(土) 16:44
by EXTRL
ひとつ言っておきます。
俺は致命的にそういうの分からん! すまん
とりあえず分かるもの全て挙げます
○は単なる区切り
WindowsVista(tm) Home Premium○Intel Celeron D insade○LX60W
FUJITHU(これがメーカー?)
評価:3.3
プロセッサ:Intel(R) celeron(R) D CPU 3.06GHz 3.06GHz
メモリ(RAM):1010MB
Re:fpsについて
Posted: 2009年10月17日(土) 17:10
by MNS
Re:fpsについて
Posted: 2009年10月17日(土) 17:59
by softya
私のノートだと67fps程度ですので、表示が30fpsなのは遅いですね。スペースを押さないと570fpsあたりです。私のノートよりも評価値が高いので、下回るのは考えられない事態ですね。
心配な点があるのは、メモリ(RAM):1010MB とメモリが極端に少ないことです。それ以外はCPUはCeleronとは言え3.06MHzですので問題ないでしょう。グラフィックボード(GPU)も非力なのは確かですが、私のノートの性能を下回るはずが無いんですが。
ってことで出来る事。
1.ビデオカードのドライバを最新にする。
2.一緒に動いているプログラムを出来るだけ停止する。
特に1.は効果があると思います。
ちなみに、お使いのPCのスペックは
http://www.fmworld.net/product/hard/pcp ... index.html
を見る限り、デスクトップ風のノートパソコンって感じですからグラフィックボードの交換も出来ないと思われますので、今あるハードのままで何とかするしかなさそうです。
Re:fpsについて
Posted: 2009年10月17日(土) 18:59
by EXTRL
解決策ありがとうございます
ただ、今使ってるPCは自分用ではなく親の仕事用なので、
さすがにそこまで大規模(?)な事は怖くてできないです。
30fpsでもゲームを作れないことはないと思うので、がんばってみます。
もし、バカみたいな処理落ちがするようであれば
コッソリやってみようかなと思います。
言い忘れてたんですが、他からダウンロードしたゲームはちゃんと60fpsに
なってたみたいです。(ファイル(?)はリリースでした。)遅くなってすいません。
これはどうなんでしょうか
Re:fpsについて
Posted: 2009年10月17日(土) 19:36
by Justy
>他からダウンロードしたゲームはちゃんと60fpsになってたみたいです。
使っているライブラリのバージョンという可能性がありますね。
DXライブラリですと、ver2系と ver3系では大きく違うので、
ver3系を使っているのなら ver2系に、ver2系を使っているのなら
ver3系を使ってみると改善されるかもしれません。
Re:fpsについて
Posted: 2009年10月18日(日) 14:51
by EXTRL
>Justyさん
3系だったので2系にしましたが、結果は変わりませんでした。
ちなみに、ニコニコ動画とこのサイトを開いた状態で実行したら、
スペース押さないで200fps未満、スペース押したら一桁になりました。
既にsoftyaさんが改善策を出してくれたので、この件は解決にします。
皆さんありがとうございました。