ページ 11

DXライブラリ タイトルバー

Posted: 2012年1月22日(日) 15:46
by L'z
DXライブラリを使って作った作品をみるとウィンドウのタイトルバーに、
ゲーム名のあとにFPSを表示しているものをみます

タイトルバーの文字の変更をSetMainWindowText関数で変更できることは知っているのですが
DrawFormatString関数のように書式付きで文字列をいれることができません

FPSは自分で計算して出すものなのでタイトルバーに書式付きで文字列を出力する関数を
調べてみたのですが、非公開関数も調べて見ましたがそれらしきものはみあたりません

そこで毎フレームごとにchar型変数にゲーム名とFPSを入れ、
それをSetMainWindowTextで毎回更新する方法を考え、
次のようなコードを考えたのですがもっといい方法があるような気がします
タイトルバーにFPSを表示している方でもっといい方法を知っていればご教授ください
フレームごとに平均FPSを表示できればこの方法と全く違ってもかまいません

コード:

char titlebar[30];
double ave_fps;

ave_fps = getAverageFps(); // 平均FPSを取得
sprintf(titlebar,"ゲームタイトル  [%f f]",ave_fps);

SetMainWindowText( titlebar ); //これを毎フレーム行う

Re: DXライブラリ タイトルバー

Posted: 2012年1月22日(日) 16:40
by beatle
僕はL'zさんのやり方が普通だと思います.
書式付き関数がもしあったとしても,結局内部でほとんど同じ事をするだけですから.

Re: DXライブラリ タイトルバー

Posted: 2012年1月23日(月) 00:13
by L'z
やっぱりこうするしかないですか

ではこの方法ですることにします

ありがとうございました

Re: DXライブラリ タイトルバー

Posted: 2012年1月23日(月) 22:52
by あたっしゅ
L'z さんが書きました: タイトルバーにFPSを表示している方でもっといい方法を知っていればご教授ください
フレームごとに平均FPSを表示できればこの方法と全く違ってもかまいません

コード:

char titlebar[30];
double ave_fps;

ave_fps = getAverageFps(); // 平均FPSを取得
sprintf(titlebar,"ゲームタイトル  [%f f]",ave_fps);

SetMainWindowText( titlebar ); //これを毎フレーム行う
getAverageFps() って DX ライブラリの非公開関数 ?
(1)DXライブラリを 3.06e にした。
(2)GetAverageFps() にしてみたりした
(3)extern double getAverageFps(); とかしてみたけど、リンクできなかった。


あと、「ご教授(きょうじゅ)」は「ご教示(きょうじ)」では ?

Re: DXライブラリ タイトルバー

Posted: 2012年1月24日(火) 20:27
by L'z
getAverageFps();
は自作関数でDXライブラリのものではないです
L'z さんが書きました: FPSは自分で計算して出すものなので
という記述と最初が小文字からなのでわかるかと思い
とくに自作関数とは明記しませんでした

わかりづらくてすみません

Re: DXライブラリ タイトルバー

Posted: 2012年1月25日(水) 23:03
by あたっしゅ
fps 表示を作ってみました。

コード:

#include <windows.h>  // 2012(H24)-01-25 class CFps 用
#include <mmsystem.h> // 2012(H24)-01-25 class CFps 用
// http://www.koj-m.sakura.ne.jp/ode/index.php?C%2FC%2B%2B%A5%B3%A1%BC%A5%C9%CA%D4
#pragma comment(lib,"winmm.lib")


//
// 2012(H24)-01-25 新設。
//
class CFps
{
	DWORD m_lastTime;
public:
	CFps(): m_lastTime( timeGetTime() ) {}
	virtual ~CFps() {}
	DWORD __fastcall getFps() {
		DWORD t = timeGetTime();
		DWORD res = 1000/( t - m_lastTime );

		m_lastTime = t;
		return res;
	}
};


int main()
{
	// (前略)
	{
		const int BUF_MAX = 80;
		char buf[ BUF_MAX ];

		sprintf( buf, "%s %ufps", msgTitle, getFps() );
		SetMainWindowText( buf ); //これを毎フレーム行う
	}
	// (後略)
}


// end.