前提・実現したいこと
JavaScriptでrequestAnimationFrameでフレームと再描画更新を行うコードを書いてみました。
そこで、一秒ごとにconsole.logで変数fpsを出力したところ、変数の値が40あたりを行ったり来たりしている状態です。
(requestAnimationFrameが60回更新しているのに対し、if(ping >= 1){}内のコードは40回しか実行されない)。
if(ping >= 2)にすることで、関数内のコードの実行を30回に抑えようとすると、実際には20回しか実行されないことも確認しました。
(この時のrequestAnimationFrameの更新は60回です)
目標としては、if関数ないの変数「ping」の値を変えることで、自由にfpsを制御できるようにしたいのですがどのような改善が必要でしょうか?
発生している問題・エラーメッセージ
期待している通りの、更新制御が行えない。
該当のソースコード
Javascript
1 2//ゲーム開始時刻 3var start = Date.now(); 4 5//過去の時間(最初は初めの時間を使う) 6var pastTime = start; 7var pastSecond = start; 8var time; 9console.log(start); 10 11//fps 12var fps = 0; 13var ping = 0; 14 15render = function () { 16 //fps管理 17 time = Date.now(); 18 ping = (time - pastTime ) / (1000/60); 19 if (ping >= 1) { 20 fps += 1; 21 pastTime = time; 22 } 23 24 //一秒判定 25 if ((Math.floor(time / 1000) - Math.floor(pastSecond / 1000)) >= 1) { 26 console.log(fps); 27 pastSecond = time; 28 fps = 0; 29 30 } 31 requestAnimationFrame(render); 32 } 33 34render();
補足情報(FW/ツールのバージョンなど)
fpsの計測はfirefoxのコンソール画面での計測です。
この質問文を書いたのは本当にあなたですか?過去の質問で「requestAnimationFrameを使ったアニメーションではfpsの制御ができない」と質問文に記載されていますが、出来ないと分かっている事に対してできる前提で質問文を書いているのはどうしてでしょうか。
内容の不足で申し訳ありません。requestAnimationFrameが描画のタイミング制御ができないのは重々承知しております。
しかしながら、実際に出せる更新速度より同等の速度、またはそれ以下の更新速度はプログラムを書くことによって、疑似的に再現できる(requestAnimationFrame60回実行するのに対し、内部の関数は30回実行する)ことも理解しているつもりです。今回はそのようなプログラムを書いた上で、理論通りに動かないために質問しました。
タイトルが誤解を生んでしまい、申し訳ありませんでした。修正を行いましたので、正しく伝わってくれれば、幸いです
なるほど、つまり単に言葉足らずで「JSの処理を軽くすれば、関節的にブラウザのFPSを引き上げることができるのではないか?」という推測が挟まっているわけですね。それを前提として「無駄な処理を減らしてFPSを引き上げたい」という質問に繋がるわけですね。この辺をちゃんと記述出来れば質問文としていい感じになると思います。
大まかにいえば、そういうことになります。しかし、前回の質問は勉強不足と言葉足らずな部分が多く、この質問の前提として使うには、いささか問題がありすぎると思い質問を新しくしました。
また今回はソースコードを添付し、firefoxでパフォーマンスを計測して定的に60fpsが出ていることを確認したうえで、制御用のコードが上手く動作していないことに対しての質問を行っているつもりです
完全なる私の言葉足らずで、ご迷惑をおかけしますが、どうかよろしくお願いします
回答1件
あなたの回答
tips
プレビュー