HSP - fps算出 (旧)

fps算出

昔に、どうやったらできるんだ~と思っていたのを思いだし、作ってみたらできました。
↓完成品 (?)

s_list="60"
notesel s_list
repeat 99
noteadd "60",-1,0
loop
*main
redraw 0
color 255,255,255 : boxf // 画面を白く塗る。このソースを実際に使うなら背景を描画とかはここに
c_a=a
b=gettime(4)*60*60*1000+gettime(5)*60*1000+gettime(6)*1000+gettime(7)
a=gettime(4)*60*60*1000+gettime(5)*60*1000+gettime(6)*1000+gettime(7)
s=b-c_a ; 処理時間
if s=0 : s=17 ; 謎のエラーを対処
fps=1000/s ; fps (単純な)
// fps平均出す
notedel 0 ; 一番古いfpsデータ削除
noteadd ""+fps,-1,0 ; 新しいfpsデータ追加
repeat 100 ; 100個全部足す (もっといい方法が無いのだろうか)
noteget p,cnt
t+p
loop
t/100 ; 100個の平均
//
pos 0,0 : color : mes ""+t+"fps" // fps表示。このソースを実際に使うなら直前に自分のソースをぶちこみ
redraw
await 10
goto *main

※7月3日、更新 (若干だが)
※1ループに1日以上かかるとfpsが正確に出ません。(そんなことはありえないと思うが…)
1ループでかかった時間 (ミリ秒) で1秒 (1000ミリ秒) を割って、一秒間に何回ループする速度かを出します。
(「謎のエラー」というのは、なぜか1ループにかかった時間が0になってしまい、「#Error 19 -->0で除算しました」が出てしまうというもの。「await 10」を入れている時点で0になるはずないんだが…)
↓作成途中だった物体

*main
redraw 0
color 255,255,255 : boxf
c_a=a
b=gettime(4)*60*60*1000+gettime(5)*60*1000+gettime(6)*1000+gettime(7)
a=gettime(4)*60*60*1000+gettime(5)*60*1000+gettime(6)*1000+gettime(7)
s=b-c_a ; 処理時間
if s=0 : s=17 ; 謎のエラーを対処
fps=1000/s ; fps (単純な)
pos 0,0 : color : mes ""+fps+"fps"
redraw
await 10
goto *main

しかしこの数値は毎回変わって変わりすぎて何が何だか分からなくなるので平均値を出します。この時に、一番古いfpsの数値を引き、新しく出たfpsの数値を足すのですが、それを位置からやると面倒なのでnote~命令を使いまくって、簡単にやりました。それを平均すれば落ち着いた数値が出ます。
ところが、平均を出すときに…。毎回平均出すためにrepeat 100~loopするのがちょっと…もうちょっとなんとかなりませんかね?


「HSP - fps算出 (旧)」への2件のフィードバック

  1. をを!なるほど、なかなか興味深い手法ですね^^
    fpsが分かると重くなる傾向があるゲームでは目安になって便利ですよね。
    是非とも何かに取り入れてください。

  2. はい。例のブロック崩し (作成が一時停止てた!まずいっ!) に採用しようかと思います。 (意味があるのかよくわからないですけど)

コメントは受け付けていません。