龍神録プログラミング2のFPS計測について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

龍神録プログラミング2のFPS計測について

#1

投稿記事 by 夢幻ノ月夜 » 1ヶ月前

龍神録プログラミングの館2に載っているFPS計測のサンプルコードをコピペして自作ゲーム(VC++2019、DXライブラリ)のFPSを計測してみたのですが、なぜかFPSが43.7ほどしか出ていません。
本体の処理が重い可能性を考慮してメインループをごっそりコメントアウトしても43.7のままでした。
次にFPS固定値の設定を30に変更しても43.7と出てしまいます。
何がおかしいのでしょうか。

コードは一部隠しますがだいたいこんな感じです。
何から解明していけばいいのか見当も付きません。
この場合何を疑うべきでしょうか、ご教授よろしくお願いします。

コード:

#include <DxLib.h>
#include "Fps.h"
//その他使ったヘッダ

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC) {
	SetWindowText("ゲームタイトル");
	ChangeWindowMode(TRUE);
	SetDrawScreen(DX_SCREEN_BACK);
	if (DxLib_Init() == -1)return -1;
	//SetDrawMode(DX_DRAWMODE_BILINEAR);

	Fps fps;
	
	/*
	
	ごちゃごちゃと一点もののローディング
	
	*/
	while (ProcessMessage() == 0 && clsDx() != -1 && ClsDrawScreen() != -1) {
		/*
		
		ゲームのメインループ(コメントアウトテスト済み)
		
		*/
		fps.draw();
		fps.wait();
		if(ScreenFlip() == -1)break;
	}

	DxLib_End();

	return 0;
}
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

Re: 龍神録プログラミング2のFPS計測について

#2

投稿記事 by 夢幻ノ月夜 » 1ヶ月前

一応垂直同期を待たなければFPS60が出ることが確認できましたが、これによってどのような問題が起きるのか知っておきたいです。引き続きご教授いただけないでしょうか。
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

Re: 龍神録プログラミング2のFPS計測について

#3

投稿記事 by 夢幻ノ月夜 » 1ヶ月前

よく見たらFPS表示が点滅していることに気づきましたがなぜこうなっているのかが解明できません。
ブレークをかけてもfpsが0になってスキップされていることは無さそうです
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

Re: 龍神録プログラミング2のFPS計測について

#4

投稿記事 by 夢幻ノ月夜 » 1ヶ月前

様々な位置でブレークをかけたり表示方法を変えてみたりしたところやはりFps.drawの中でだけ起こっているようです
なぜ描画が反映されない、またはスキップされているのでしょうか
実行されていないケースは絶対に無いはずなのですが…
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

Re: 龍神録プログラミング2のFPS計測について

#5

投稿記事 by 夢幻ノ月夜 » 1ヶ月前

ScreenFlipとProcessMessageの順番を入れ替えたらかなりマシになりましたがまだFps.drawが時々飛んでますね…
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

Re: 龍神録プログラミング2のFPS計測について

#6

投稿記事 by 夢幻ノ月夜 » 1ヶ月前

fps.waitとfps.drawをメインループの先頭に持ってきてScreenFlipをProcessMessageより先に処理することで解決となりました…
ただ何が起こっていたのかはよく分からないので詳細が分かる方いらっしゃいましたら教えて欲しいです…
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
あたっしゅ
記事: 284
登録日時: 9年前
住所: 東京23区
連絡を取る:

Re: 龍神録プログラミング2のFPS計測について

#7

投稿記事 by あたっしゅ » 1ヶ月前

https://detail.chiebukuro.yahoo.co.jp/q ... 1156444201
DXライブラリについて、ScreenFlip()関数の動...-Yahoo 知恵袋(ja)

>あと、ScreenFlip()はデフォルトで垂直同期(液晶なら一般的に1/60秒周期)を待つ設定です。
>なので、ScreenFlipのタイミングは1/60秒の倍数となります。
>もし、ScreenFlip()自体に問題があるなら、切り替えはSetWaitVSyncFlag(FALSE);で出来ます。
手提鞄あたっしゅ、[MrAtassyu] http://ameblo.jp/mratassyu/
手提鞄屋魚有店(てさげかばんやうおありてん)
レスがついていないものを優先して、レスしています。時々、見当外れなレスをします。

ISLe
記事: 2646
登録日時: 9年前
連絡を取る:

Re: 龍神録プログラミング2のFPS計測について

#8

投稿記事 by ISLe » 1ヶ月前

SetDrawScreen(DX_SCREEN_BACK);
をDxLib_Init関数を呼び出した後に移動すれば良いのではないかと思います。

アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

Re: 龍神録プログラミング2のFPS計測について

#9

投稿記事 by 夢幻ノ月夜 » 1ヶ月前

>>あたっしゅさん
やはり1回余計に待ってたんですね…ありがとうございます

>>ISLeさん
盲点でした
直しておきます
毎回ゲーム作ろうとするたびに壁にぶち当たる

返信

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