【发布时间】:2017-09-09 21:06:19
【问题描述】:
我正在尝试将我的代码转换为对象文字样式。我可以创建场景,但我遇到了动画问题。
在这一行中,我收到“Uncaught TypeError: Cannot read property 'render' of undefined”错误。
this.renderer.render(this.scene, this.camera);
这是我的对象:
var three = {
objects: function() {
/*objects*/
},
createScene: function() {
this.container = document.getElementById("container");
this.scene = new THREE.Scene();
this.camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.001, (26 * 10));
this.camera.position.set(26, (26 / 2), 26);
window.addEventListener("resize", function() {
this.camera.aspect = window.innerWidth / window.innerHeight;
this.camera.updateProjectionMatrix();
this.renderer.setSize(window.innerWidth, window.innerHeight);
});
this.objects();
this.renderer = new THREE.WebGLRenderer();
this.renderer.setPixelRatio(window.devicePixelRatio);
this.renderer.setSize(window.innerWidth, window.innerHeight);
this.container.appendChild(this.renderer.domElement);
this.controls = new THREE.OrbitControls(this.camera, this.renderer.domElement);
},
animate: function() {
this.renderer.render(this.scene, this.camera);
requestAnimationFrame(this.animate);
},
render: function() {
this.createScene();
this.animate();
}
};
three.render();
【问题讨论】:
-
事件侦听器中
this的值不会是对您的对象的引用。 -
那么就不能用对象字面量做动画吗?
-
是的,但是您必须处理
this如何获得其价值的事实。您可以在createScene()中声明一个变量并将this分配给它,然后在事件处理程序中使用该引用。 -
这不是一个真正的threejs问题。
标签: javascript three.js object-literal