fpsについて

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

fpsについて

#1

投稿記事 by EXTRL » 15年前

ゲームプログラミングの館のs7節の「fpsを表示する。」の
サンプルプログラム(コピペ用)をエディタ(?)に丸写しして
実行すると、表示されるfpsが30前後(単位「fps」付き)になります。
しかも、館に載っている実行結果は一行ですが、
自分の実行画面は、その下に30ms前後の数字(単位付き)が表示されます。
これは自分のPC設定がおかしいんでしょうか? それともこんなもんなんでしょうか。
OS(?)はWindowsVistaです。 コンパイラはBorland+BCC Developerです。
返答お願いします。 不足があれば付け足します

softya

Re:fpsについて

#2

投稿記事 by softya » 15年前

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行出ないとおかしいです。

KEYONN_

Re:fpsについて

#3

投稿記事 by KEYONN_ » 15年前

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;
}

toyo

Re:fpsについて

#4

投稿記事 by toyo » 15年前

DxLib_Init()の前に
SetWaitVSyncFlag( FALSE );
を入れたらいいかも

EXTRL

Re:fpsについて

#5

投稿記事 by EXTRL » 15年前

>softyaさん
どのようなパソコンと言われてもあまりよく分かりません;
リフレッシュレートは、ググった所、使ってるPCは液晶なので多分変更は出来ないと思います。
ただ、使ってるPCはデスクトップで、買ってから1年ちょっとぐらいです。
メモリ(?)は、ローカルディスクCはもともと50GBありますが、残りの容量は700MB切ってます。
Dの方は150GB以上あります。


>TKOZさん
実行したところ、大体250~300あたりを行ったり来たりしてます。
スペースで表示したとたんに30あたりになります。
このことから多分PC自体のリフレッシュレートは60以上あると思います。

>toyoさん
やってみましたが、実行結果は変わりませんでした。

softya

Re:fpsについて

#6

投稿記事 by softya » 15年前

結果を見る限り描画が遅いのは間違いなさそうです。
となると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
と表示されます。

EXTRL

Re:fpsについて

#7

投稿記事 by EXTRL » 15年前

ひとつ言っておきます。
俺は致命的にそういうの分からん! すまん

とりあえず分かるもの全て挙げます
○は単なる区切り

WindowsVista(tm) Home Premium○Intel Celeron D insade○LX60W
FUJITHU(これがメーカー?)
評価:3.3
プロセッサ:Intel(R) celeron(R) D CPU 3.06GHz 3.06GHz
メモリ(RAM):1010MB

MNS

Re:fpsについて

#8

投稿記事 by MNS » 15年前

http://kakaku.com/spec/00100419129/

これのようですね。
スペック的には大丈夫だとは思うんですが・・・

softya

Re:fpsについて

#9

投稿記事 by softya » 15年前

私のノートだと67fps程度ですので、表示が30fpsなのは遅いですね。スペースを押さないと570fpsあたりです。私のノートよりも評価値が高いので、下回るのは考えられない事態ですね。
心配な点があるのは、メモリ(RAM):1010MB とメモリが極端に少ないことです。それ以外はCPUはCeleronとは言え3.06MHzですので問題ないでしょう。グラフィックボード(GPU)も非力なのは確かですが、私のノートの性能を下回るはずが無いんですが。
ってことで出来る事。
1.ビデオカードのドライバを最新にする。
2.一緒に動いているプログラムを出来るだけ停止する。
特に1.は効果があると思います。

ちなみに、お使いのPCのスペックは
http://www.fmworld.net/product/hard/pcp ... index.html
を見る限り、デスクトップ風のノートパソコンって感じですからグラフィックボードの交換も出来ないと思われますので、今あるハードのままで何とかするしかなさそうです。

EXTRL

Re:fpsについて

#10

投稿記事 by EXTRL » 15年前

解決策ありがとうございます
ただ、今使ってるPCは自分用ではなく親の仕事用なので、
さすがにそこまで大規模(?)な事は怖くてできないです。
30fpsでもゲームを作れないことはないと思うので、がんばってみます。
もし、バカみたいな処理落ちがするようであれば
コッソリやってみようかなと思います。

言い忘れてたんですが、他からダウンロードしたゲームはちゃんと60fpsに
なってたみたいです。(ファイル(?)はリリースでした。)遅くなってすいません。
これはどうなんでしょうか

Justy

Re:fpsについて

#11

投稿記事 by Justy » 15年前


>他からダウンロードしたゲームはちゃんと60fpsになってたみたいです。

 使っているライブラリのバージョンという可能性がありますね。
 
 DXライブラリですと、ver2系と ver3系では大きく違うので、
ver3系を使っているのなら ver2系に、ver2系を使っているのなら
ver3系を使ってみると改善されるかもしれません。

EXTRL

Re:fpsについて

#12

投稿記事 by EXTRL » 15年前

>Justyさん
3系だったので2系にしましたが、結果は変わりませんでした。

ちなみに、ニコニコ動画とこのサイトを開いた状態で実行したら、
スペース押さないで200fps未満、スペース押したら一桁になりました。

既にsoftyaさんが改善策を出してくれたので、この件は解決にします。
皆さんありがとうございました。

閉鎖

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