回答編集履歴

2

ちょっとだけ校正

2018/10/01 08:37

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -78,7 +78,9 @@
78
78
 
79
79
 
80
80
 
81
+ ゲームやフレームというワードが質問文にありますが、
82
+
81
- もしかして、ゲームのようなフレーム単位で天国か地獄かが分かれるようなゲームを作りたいのでしょうか?
83
+ もしかしてフレーム単位で天国か地獄かが分かれるような構造のゲームを作りたいのでしょうか?
82
84
 
83
85
 
84
86
 
@@ -134,9 +136,9 @@
134
136
 
135
137
  - setTimeoutやrequestAnimationFrameは条件を満たした後も、イベントループの巡回を待つ必要があり、平気で数ms発火が遅延する
136
138
 
137
- - JSはシングルスレッドなので、(ほぼ)同時に複数条件を満たした場合、どちらが先に実行されるかを制御できない、それにより平気で数ms発火が前後する
139
+ - JSはシングルスレッドなので、同時に1個の処理しかできない。したがって同時に複数条件を満たした場合、どちらの関数(制御出来ないのでほぼランダムに)先に実行され、もう片方は後回しにされる、それにより平気で数ms発火が前後する
138
140
 
139
- - requestAnimationFrameは「はい描画しました、次のフレームを作る準備をしてくださいね」と言っている
141
+ - requestAnimationFrameは「はい描画しました、次のフレームを作る準備をしてくださいね」と言っているので、画面への反映タイミングはどう頑張っても1フレーム遅れ
140
142
 
141
143
 
142
144
 

1

質問文のコードをリファクタリング

2018/10/01 08:37

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -23,6 +23,54 @@
23
23
  まぁ、`DOMHighResTimeStamp`はよく分からないDouble型の数値なので扱いはめっちゃ大変だと思いますが、
24
24
 
25
25
  この中には何時に前回のレンダリングが行われたかの時刻が取得できるので、フレーム計算を行う上でより正確な記述ができるはずです。
26
+
27
+
28
+
29
+ ---
30
+
31
+
32
+
33
+ 質問文のようなFPSの調査をしたいのであれば、
34
+
35
+ requestAnimationFrameとsetTimeoutやsetIntervalを併用すればいいんじゃないですか?
36
+
37
+ 厳密には1000ms毎ではなく、998〜1002msとかの範囲でブレるでしょうけど、
38
+
39
+ 質問文のコードもどうせズレているので誤差みたいなもんでしょう。
40
+
41
+
42
+
43
+ ```JavaScript
44
+
45
+ // fps以外の状態変数など不要だ!!
46
+
47
+ var fps = 0;
48
+
49
+
50
+
51
+ var render = function () {
52
+
53
+ fps++;
54
+
55
+ requestAnimationFrame(render);
56
+
57
+ }
58
+
59
+ render();
60
+
61
+
62
+
63
+ var showFps = function () {
64
+
65
+ console.log(fps);
66
+
67
+ fps = 0;
68
+
69
+ }
70
+
71
+ setInterval(showFps, 1000);
72
+
73
+ ```
26
74
 
27
75
 
28
76