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 回答