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
访问加载函数内部的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 = -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
分配到加载器函数内部,而不是外部。