【发布时间】:2014-01-17 14:56:23
【问题描述】:
我很抱歉再次在这里问这个问题。我知道成员 os Stack Overflow 不是我的专属 使用但确实需要找到解决此问题的方法。
让我解释得更好,因为上次我并不清楚我想要什么。
我正在使用 THREE.JS 开发类似 RPG 的游戏。我想到的是一款类似于 IronBane MMO 的游戏,但没有 目前的网络服务器功能(仅用于单人游戏)。
我对 THREE.js 比较陌生,在某些时候,我开始在库中工作以处理对象加载 im 我的水平。因为我使用 3DStudio Max 制作 de 模型,所以我决定使用提供的 OBJMTLLoader 库。
我已经确定了加载静态对象的功能及其类似的东西。
function loadObject(obj,mtl,pos){ // Adiciona objeto sem vinculá-lo a uma variável
var loader = new THREE.OBJMTLLoader();
loader.load( obj, mtl, function ( object ) {
object.position.set(pos[0],pos[1],pos[2]);
scene.add( object );
});
}
当我需要实例化这个对象时,问题就来了。例如,我尝试了很多东西:
function addObject(obj,mtl){ // Declara e adiciona um objeto no mapa
var conteudo;
var loader = new THREE.OBJMTLLoader();
loader.load( obj,mtl, function( object ){
conteudo = object;
});
setTimeout(function(){
scene.add( conteudo );
},1000);
conteudo 变量当然是未定义的。我明白我需要先等待对象加载。它 大约需要 2 个渲染循环。为此,我使用 setTimeout 函数。使用 scene.add(conteudo) 对象 已成功添加到场景中。然后我尝试使用
return conteudo;
而且,当我打电话时……
var objeto = new addObject('object path','material path')
我得到了一个 addObject 实例,而不是我预期的 Object3D。我还尝试在 de 函数之外声明一个数组,并且 像这样从 addObject 内部推送它:
function addObject(obj,mtl,objectArray)
var loader = new THREE.OBJMTLLoader();
loader.load( obj,mtl, function( object ){
conteudo = object;
});
setTimeout(function(){
scene.add( conteudo );
objectArray.push( conteudo );
},1000);
在第二个中,当我控制台记录我得到的数组时:
Array[1]
0 : THREE.Object3D
length : 1
但是当我尝试使用 Array[0] 或 console.log(Array.length) 时,我分别得到 undefined 和 0。
如果有人能帮我解决这个问题,我将不胜感激。那将是真棒。谢谢你!
【问题讨论】:
-
你的意思是
var objeto = addObject()不是var objeto = new addObject()?
标签: three.js