[ad_1]
私は現在、プロジェクトを構築するためのチュートリアルを見ています.
現在、ヘビのゲームに取り組んでいます。
let speed = 2; let lastPaintTime = 0; //Game functions function main(ctime) { window.requestAnimationFrame(main); if ((ctime - lastPaintTime) / 1000 < 1 / speed) { return; } lastPaintTime = ctime; gameEngine(); } //Main logic starts here window.requestAnimationFrame(main);
私の混乱:
このコードでは、「If 条件」をチェックしないでください。 なぜなら:
1) window.requestAnimationFrame(main): main 関数を呼び出します。
2) main 関数の最初の行で、再び main 関数を呼び出します。 したがって、コントロールはメイン関数に移動し、永遠に自分自身を呼び出し続ける必要があります。
3) if 条件は決してチェックされるべきではありません。
しかし、chatGPTに問い合わせたところ、if条件が実行されるとのことでした。
メイン関数をすぐに呼び出すのではなく、スケジュール/キューに入れると書かれています。
この動作は Javascript 言語で何と呼ばれますか? 詳しくはどこで読めますか。 これはすべてのプログラミング言語に共通ですか?
私が試したこと:
chatGPT から読んだこと
requestAnimationFrame は、ブラウザー ウィンドウの次の再描画の前に呼び出される関数をスケジュールするメソッドです。 関数をすぐに呼び出すのではなく、後で呼び出される関数のキューに追加します。 これにより、ブラウザーは一貫したフレーム レートで画面を更新できると同時に、フレーム間で他のタスクを実行できます。
window.requestAnimationFrame(main) がメイン関数内で実行されると、メイン スレッドの外部で実行される Web API を呼び出し、コールバックをキューに配置して結果を取得し、その間に他のコード (「window.requestAnimationFrame(main)」以下のコード) を並行して実行します。実行されているため、「if」部分が実行されます。
解決策 1
if ステートメントの条件式を見てください。
if ((ctime - lastPaintTime) / 1000 < 1 / speed)
どこかに何らかの比較演算子がありますか? いいえ? 比較演算子がない場合、true または false を決定するためのデフォルトは、式を評価し、結果が 0 かどうかを決定することです。 結果が 0 以外の場合、結果は true になり、それ以外の場合は false になります。
[ad_2]
コメント