danoniplus icon indicating copy to clipboard operation
danoniplus copied to clipboard

[要望] setTimeout -> requestAnimationFrameへの移行

Open cwtickle opened this issue 2 years ago • 1 comments

改善詳細 / Details of Improvement

  1. 現状のプレイ画面処理で使っているsetTimeoutを、requestAnimationFrameに置き換えたい。 https://developer.mozilla.org/ja/docs/Web/API/window/requestAnimationFrame

改善理由 / Reason for Improvement

  • 現状はsetTimeoutにて処理経過時間を別に取得した上で、その差分経過時に次の処理を実行する方法を取っている。 どの程度改善するかは試してみないとわからないが、まずは検討に上げる必要があると考えたため。 https://github.com/cwtickle/danoniplus/wiki/AboutFrameProcessing

スクリーンショット / Screenshot

期待する見せ方・挙動 / Expected Behavior

その他検討事項 / Other Considerations

  • 過去作品の移植の都合でfpsを60以外に設定している場合があるが、 requestAnimationFrameでは原則60fps固定となるため、フレーム計算時にこれらの数値を60fps用に変換する必要がある。
  • requestAnimationFrameでは非アクティブ時にfpsが下がるという問題があるが、 それは現状のsetTimeoutでも同じため、同様のことができれば影響は少ないと考えている。

cwtickle avatar Jul 03 '23 03:07 cwtickle

#1513 にて仮実装しましたが、以下の問題があり実装を断念しました。 このIssueはクローズします。⇒一応残しておきます。

  • requestAnimationFrame でも、処理量が多いとFPSが下がる
  • FPSが下がった場合にフレームスキップする方法はあるが、CW Editionの場合矢印やフリーズアローの座標操作、判定スキップを考慮しなければならず、ハードルが高い。 https://blog.oimo.io/2021/06/06/adjust-fps/ https://kuroeveryday.blogspot.com/2018/03/frame-skip-in-requestanimationframe.html
  • そもそも144Hz対応のゲーミングモニタでは60fpsではなく144fpsで動作する

cwtickle avatar Jul 07 '23 03:07 cwtickle