我正在开发一个简短的'Engine'类,以简化与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中运行此功能时,我收到错误:未捕获TypeError:数字不是函数,并且在检查Engine.Render的fixedUpdate变量时,它通常是一些非常大的数字,显然没有注册为调用代码传入的匿名函数。
作为一个完整性测试,我尝试将句柄传递给非匿名函数,如:
function animation() {
cube.rotation.x += 0.01;
cube.rotation.y += 0.02;
}
Engine.Render(animation);
......并得到完全相同的结果。我怀疑问题在于我如何调用参数。
答案 0 :(得分:3)
试试这个:
pub.Render = function (fixedUpdate) {
requestAnimationFrame(function () {pub.Render();});
fixedUpdate();
renderer.render(scene, camera);
};