【解決方法】この requestanimationframe コードで if 条件が実行されるのはなぜですか?

プログラミングQA


私は現在、プロジェクトを構築するためのチュートリアルを見ています.
現在、ヘビのゲームに取り組んでいます。

JavaScript
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 になります。

コメント

タイトルとURLをコピーしました