Three.js - 访问场景中的子对象

时间:2015-08-09 03:02:22

标签: javascript object three.js blender

我试图访问场景中的子对象sole。我可以使用sole访问loader函数内的var obj,但我需要从loader函数外部访问它。

Here's the working codehere's the json model file

我可以从加载器内部访问它,如下所示:

var loader = new THREE.ObjectLoader();  
loader.load("models/shoe4.json", function (obj) {
    scene.add (obj);
    scene.rotation.y = Math.PI/1;
    scene.position.y = -5;
    scene.position.z = -24;

    var sole = obj.getObjectByName( "sole", true );
    sole.position.y = -5;

});

但我需要做这样的事情:

var loader = new THREE.ObjectLoader();  
loader.load("models/shoe4.json", function (obj) {
    scene.add (obj);
    scene.rotation.y = Math.PI/1;
    scene.position.y = -5;
    scene.position.z = -24;     
});

var sole = obj.getObjectByName( "sole", true );
sole.position.y = -5;

基本上我需要把它作为自己的功能供以后使用。

我也试过

var sole = scene.getObjectByName( "sole", true );
sole.position.y = -5;

这给了我错误:

  

未捕获的TypeError:无法读取属性' getObjectByName'未定义的

如何从任何地方访问对象sole?简单地声明var obj,无效。

1 个答案:

答案 0 :(得分:4)

首先在lambda函数的范围之外声明sole,如下所示:

var sole = null;
var loader = new THREE.ObjectLoader();  
loader.load("models/shoe4.json", function (obj) {
    scene.add (obj);
    scene.rotation.y = Math.PI/1;
    scene.position.y = -5;
    scene.position.z = -24;

    sole = obj.getObjectByName( "sole", true );
    sole.position.y = -5;

});

// this will FAIL because sole is undefined when this line of code executes
sole.position.x = 5;

其次,在实际执行lambda函数之后,程序不能访问sole,直到。如果您不熟悉异步(或事件驱动)编程模型,那么您应该对它进行一些阅读:

http://code.tutsplus.com/tutorials/event-based-programming-what-async-has-over-sync--net-30027

https://msdn.microsoft.com/en-us/library/windows/apps/Hh700330.aspx