1

Three.js とのやり取りをいくらか簡素化するために、短い「エンジン」クラスに取り組んでいます。以下のように、例の Render() メソッドをこの Engine JS クラスにリファクタリングしました。

var Engine = function () {
  var pub = {},
      scene,
      camera;

  // SNIP: Extra private and public variables and functions...

  pub.Render = function (fixedUpdate) {
    requestAnimationFrame(pub.Render);
    fixedUpdate();
    renderer.render(scene, camera);
  };

  return pub;
}();

実行したいアクションを含む関数を渡すことで、それを使用しようとします。例えば:

Engine.Render(function () {
    cube.rotation.x += 0.01;
    cube.rotation.y += 0.02;
});

ただし、これを Chrome で実行しようとすると、エラーが発生します: Uncaught TypeError: number is not a functionで、Engine.Render の fixedUpdate 変数を調べると、通常は非常に大きな数であり、匿名関数として登録されていないようです渡された呼び出しコード。

健全性テストとして、次のような非匿名関数にハンドルを渡そうとしました。

function animation() {
  cube.rotation.x += 0.01;
  cube.rotation.y += 0.02;
}

Engine.Render(animation);

...そして、まったく同じ結果が得られました。問題は、パラメーターの呼び出し方法にあると思われます。

4

1 に答える 1

3

これを試して:

  pub.Render = function (fixedUpdate) {
    requestAnimationFrame(function () {pub.Render();});
    fixedUpdate();
    renderer.render(scene, camera);
  };
于 2013-01-09T18:50:08.873 に答える