Javascript 如何在对象类中调用.render和.animate函数?
这是我寻找答案的第七天。 我想写一个简单的游戏,我想调用一个对象 我的想法是,我想要一个模块化的游戏,所以我用通常的方式调用场景和所有这些: main.js:Javascript 如何在对象类中调用.render和.animate函数?,javascript,three.js,Javascript,Three.js,这是我寻找答案的第七天。 我想写一个简单的游戏,我想调用一个对象 我的想法是,我想要一个模块化的游戏,所以我用通常的方式调用场景和所有这些: main.js: var scene, controls, camera, renderer; var SCREEN_WIDTH, SCREEN_HEIGHT; ..... var thing; init(); animate(); function init() { ..... thing = new Player(); .
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对象时,我希望它出现在场景中,并根据它们的内部循环/render/animate方法设置动画
请帮助并告诉我使用其所有属性创建新对象的正确方法。首先,
此。bobby
将在动画方法中返回未定义的
,除非您将其声明为此。bobby
在构造函数中:
function Player() {
this.bobby = null; // was: var bobby;
this.loader = new THREE.JSONLoader();
但这可能没有必要
要在即将渲染对象时执行某些代码,可以为该对象定义onBeforeRender
方法。renderer.render
方法会自动为每个对象调用onBeforeRender
,因此在您的情况下,您可以为this.bobby
对象定义它
(定义:onBeforeRender(渲染器、场景、摄影机、几何体、材质、组)
)
下面是一个例子:
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;
};
}
);
}
这有优化的余地,但我将留给您。看来您已经做到了,因此调用
newplayer()代码>将其添加到场景中。因此,在animate
循环中,只需调用thing.animate()调用render()之前的code>代码>。如果这没有你想要的效果,请描述哪一步不起作用。玩家没有出现在场景中吗?这不是动画吗?有控制台错误吗?没有错误。播放器确实调用正确,但是我必须在main animate()中添加东西.animate(){}。在mains.js中,我想知道是否有方法在Player.js文件中调用animate()。我要寻找的效果是,在调用Player()对象后,将与Mesh.data textures/etc一起调用有关对象应如何设置动画的信息。不管在Player.js的Object Definition/Class.in中有什么,我都按照你说的做了,但它不起作用:THREE.js
<代码>onBeforeRender
在r80中不存在。你会考虑升级到最新版本吗?哦哇!我完全不知道有新版本。我现在就去试试,我会把贝克交给你。另外,非常感谢你这么快的回复。哦,我的天哪!它确实有效。谢谢你,我的导师!