这是我寻找答案的第7天。 我想写一个简单的游戏,我想要一个对象。
我的想法是我想要一个模块化的游戏,所以我调用场景和通常的方式:
main.js:
var scene, controls, camera, renderer;
var SCREEN_WIDTH, SCREEN_HEIGHT;
.....
var thing;
init();
animate();
function init() {
.....
thing = new Player();
.....
}
function animate() {
.....
}
function render() {
......
}
然后我有我的(让我们说 - >)Player.js类:
function Player() {
var bobby;
this.loader = new THREE.JSONLoader();
this.loader.load(
'obj/models/minecraft_sole.json',
function ( geometry, materials ) {
var material = new THREE.MultiMaterial( materials );
var bobby = new THREE.Mesh( geometry, material );
bobby.position.set(0, 0, 0);
bobby.castShadow = true;
bobby.receiveShadow = false;
scene.add( bobby );
}
);
}
Player.prototype.animate = function() {
this.bobby.rotation.y -= 0.5;
}
在第一批代码中,我调用了一个新对象:
thing = new Player();
所以一切都像魅力一样 - 模型加载,'纹理加载和所有这些东西,但是 - 这是我无法弄清楚的:
在Player类中,我想为我的Player对象定义render()和animate()方法/函数,这样当我最终在主文件(main.js)中调用我的Player OBJECT时,我希望它出现根据他们的内循环/渲染/动画方法在场景和动画。
请帮助并告诉我使用它的所有属性创建新对象的正确方法。
答案 0 :(得分:3)
首先,this.bobby
将在您的动画方法中返回undefined
,除非您在构造函数中将其声明为this.bobby
:
function Player() {
this.bobby = null; // was: var bobby;
this.loader = new THREE.JSONLoader();
但这可能没有必要。
要在对象即将渲染时执行某些代码,您可以为该对象定义onBeforeRender
方法。 renderer.render
方法会自动调用每个对象的onBeforeRender
呈现,因此在您的情况下,您可以为this.bobby
对象定义它。
(定义:onBeforeRender( renderer, scene, camera, geometry, material, group )
)
以下是一个例子:
function Player() {
var bobby = null;
this.loader = new THREE.JSONLoader();
this.loader.load( '...',
function ( geometry, materials ) {
// the rest of your code is fine
bobby = new THREE.Mesh(...);
bobby.onBeforeRender = function(){
// note that in this callback, "this" now refers to the "bobby" object
this.rotation.y -= 0.5;
};
}
);
}
这有待优化的空间,但我会把它留给你。