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);
...そして、まったく同じ結果が得られました。問題は、パラメーターの呼び出し方法にあると思われます。