hsp3dish.jsのウェイト(とサウンド)についてどれくらい環境差があるのか知りたくてデモを作りました。テストご協力頂けないでしょうか。
dish.js のウェイトは ENV.HSP_FPS のオプションで変えられるようなのですが、
試した限りでは 60 に設定しても実際には 40fps くらいしかなりませんでした。
それで 0 に設定すると 60fps になったのでしばらくこれで作っていましたが、
気になってモニタのリフレッシュレートを 75Hz に変えたところ 75fps になってしまいました。
最近はリフレッシュレート 144Hz などのモニタも出ており、60fps 基準で作ったゲームが倍以上の速度で動いてしまってはゲームになりません。
初めは await 16 で一定で動かせるのではと思ったのですが、
実験(http://hsproom.me/program/view/?p=1)してみたら 60Hz→60fps、75Hz→37.5fps という結果に。
垂直同期を待っているとしたら 75Hz だと1回更新タイミングを跨いでしまう(75/2=37.5)のではと予想しています。
次に、前回とのフレーム時間差を利用する方法を試しました。
時間差が 10ms なら 10 加算、15ms なら 15 加算という感じです。
これならリフレッシュレートに依らず一定の早さが実現できたのですが、
慣れていないのもあってこの方法だと以前と同じような動きにするのにかなり苦戦しました。
細かい制御とかタイミングが取りづらいというか…
そこで今回のデモのように実際の経過時間から更新フレームと描画フレームを調整する方法を実装しました。
これなら以前と同じような書き方ができ、かつリフレッシュレートの違いもある程度吸収できます。
ただどうしても 60fps 基準のものを 75Hz などの60の倍数ではない環境で動かすとカクつきが頻繁に発生してしまいます。それでも動作速度が変わってしまうよりかはマシだろうという判断です。
本当は2番目の方法で書ければベストなのかもしれませんが、自分にはちょっと厳しい…
今回のデモはこのフレーム実装がちゃんと動作するかのテストです。
そもそもリフレッシュレートに依存しているのかも定かではないです。
テストは2つあり、1つ目はそのフレームのテスト、2つ目はどれくらい負荷がかけられるかのテストです。
サウンドのテストも兼ねています。
以前、自環境だとループが少し途切れたり音が鳴らなかったりしたのですが、いつの間にか直っていて。
ただその代わり?Chromeは右側からしか音が出ない状況です。
テストに使用した OS とブラウザ、RESULTの4つの数字と、音の再生状況を書き込んで頂けると幸いです。
あとモニタのリフレッシュレート、CPU、ビデオカード等もよければお願いします。
(動作不明ですがスマホ・タブレットも待ってます…)
(100Hz以上、G-SYNC、FreeSyncなモニタも気になる…)
テストページ: http://hsproom.me/program/view/?p=203
サンプル動画: https://youtu.be/nzoL1hD3Gb0
Win 10, Cpu i5-4570 3.2GHz, GTX 650Ti
Firefox 50.1.0 : 音OK
(60Hz) 1000, 966, 60, 354
(75Hz) 1000, 1000, 75, 346
Chrome 55.0.2883.87 m : 音右側しか鳴らない
(60Hz) 1001, 973, 60, 320
(75Hz) 1000, 1000, 76, 316
Edge 38.14393.0.0 : 音鳴らない
(60Hz) 1000, 968, 60, 259
(75Hz) 1000, 992, 76, 256