Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js-访问场景中的子对象_Javascript_Object_Three.js_Blender - Fatal编程技术网

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

Javascript Three.js-访问场景中的子对象,javascript,object,three.js,blender,Javascript,Object,Three.js,Blender,我正在尝试访问场景中的子对象sole。我可以使用obj访问加载函数内部的varsole,但我需要从加载函数外部访问它 及 我可以从加载程序内部访问它,如下所示: var loader = new THREE.ObjectLoader(); loader.load("models/shoe4.json", function (obj) { scene.add (obj); scene.rotation.y = Math.PI/1; scene.position.y =

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

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

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 = 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;
但我需要这样做:

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 = 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;
基本上我需要把它自己的功能,供以后使用

我也试过了

var sole = scene.getObjectByName( "sole", true );
sole.position.y = -5;
这给了我一个错误:

未捕获类型错误:无法读取未定义的属性“
getObjectByName


如何从任何位置访问对象
sole
?简单地声明
var obj,
不起作用。

首先声明
sole
超出lambda函数的范围,如下所示:

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 = 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
。如果您不熟悉异步(或事件驱动)编程模型,那么您应该阅读一下:


首先声明
sole
超出lambda函数的范围,如下所示:

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 = 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
。如果您不熟悉异步(或事件驱动)编程模型,那么您应该阅读一下:


您是否尝试在加载器函数外部定义
sole
,但在加载器函数内部分配它?是的。我在第一行有一堆变量
var sole,obj
等,但是如果我尝试访问
sole=obj.getObjectByName(“sole”,true)从加载器函数外部,我仍然得到错误
未捕获类型错误:无法读取未定义的属性“getObjectByName”
。似乎很奇怪,有人会认为这应该可以完美地工作。@AgenZebra否,尝试在加载函数内部分配
sole
,而不是外部。您是否尝试在加载函数外部定义
sole
,但在加载函数内部分配它?是的。我在第一行有一堆变量
var sole,obj
等,但是如果我尝试访问
sole=obj.getObjectByName(“sole”,true)从加载器函数外部,我仍然得到错误
未捕获类型错误:无法读取未定义的属性“getObjectByName”
。看起来很奇怪,有人会认为这应该可以很好地工作。@AgenZebra不,尝试将
sole
分配到加载器函数内部,而不是外部。