HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1211
甘酒d3getfps関数の戻り値を実数型にするには・・?3解決


甘酒

リンク

2012/12/11(Tue) 21:03:56|NO.51090

d3m.hspの「d3getfps」関数では戻り値の型がintとなっています
某弾幕STGの表示のように、○△.□という表示にしたいのですが、
やり方が分かりません。
d3m.hspのd3getfpsの最後(returnの一行前)に、

cfps=double(cfps)
を追加してみたのですが、当然の如く、小数第1位以下も表示されてしまう上に、小数以下は全て0になってしまいます。

ご教授いただけないでしょうか。



この記事に返信する


GENKI

リンク

2012/12/11(Tue) 22:22:47|NO.51092

d3getfpsも内部ではtimeGetTime関数を平均して使っています。
timeGetTime関数を使って平均しなければ小数点以下の値まで取得できます。
使う時はざっくりこんな感じでしょうか。

told = t t = timeGetTime() a = 1000.0/(t - told) mes a ; mes strf("%.2f", a)
でも結局は数値で表示すると見難いので使う時は平均値を算出して表示することになります。
また、timeGetTime関数の精度は5ミリ秒程度らしいので小数点以下2桁までしか正確な値になってない点ご注意ください。



check

リンク

2012/12/11(Tue) 23:32:58|NO.51093

ちなみに、timeBeginPeriod(1)を指定すれば、
timeGetTimeの精度は1ms秒まで上がる。
ただし、終了時にtimeEndPeriod(1)を指定することを忘れずに。
そして、精度を上げている間は他のプログラムにも影響が出る。

ゲームを作成しているのであれば
「このゲームを起動する前にすべてのアプリケーションをなるべく終了させてください。」
とでもreadme.txtファイルに書いておいたほうがいいだろう。



甘酒

リンク

2012/12/12(Wed) 01:31:20|NO.51094

御回答有難うございます。
なんとか自分の思った通りの動作をさせる事ができました。
ソースコードは他の方用に載せておきます。
	
#uselib "winmm.dll" #cfunc global FPSGet "timeGetTime" told = t t = FPSGet() fps = 1000.0/(t - told)//FPSの更新 pos 0,0 mes strf("%.1f",fps)//FPSの表示 小数第1位を切り捨てる return
でした。
まだまだHSP初心者な為、strfを理解するのに多少時間がかかるかもしれませんが、
宜しくお願いします。



ONION software Copyright 1997-2023(c) All rights reserved.