简体   繁体   English

三.js 对象转数组

[英]Three.js object to array

I'm just beginner with Three.js.我只是 Three.js 的初学者。 I would like to push my 'palmtree' object to an array.我想将我的“palmtree”对象推送到一个数组。 My code should be fine, I think..我的代码应该没问题,我想..

I have my var objects = [];我有我的var objects = []; . .

And inside the init:在 init 中:

var mtlLoader = new THREE.MTLLoader();
mtlLoader.load("objects/palmtree.mtl", function(materials) {
    materials.preload();
    var objLoader = new THREE.OBJLoader();
    objLoader.setMaterials(materials);
    objLoader.load("objects/palmtree.obj", function(palmtree) {
        palmtree.position.x = 205.12577753354344;
        palmtree.position.y = 2;
        palmtree.position.z = -600.0613083252872;
        palmtree.scale.x = 64;
        palmtree.scale.y = 64;
        palmtree.scale.z = 64;
        scene.add(palmtree);
        objects.push( palmtree );
    });
});

The result looks fine.结果看起来不错。 I have my palmtree in the scene.我在场景中有我的棕榈树。 But when I try objects.length I get 0.. I don't understand what is wrong.但是当我尝试objects.length我得到 0.. 我不明白出了什么问题。

How can I push my palmtree to the objects array?如何将我的 palmtree 推送到对象数组? Many thanks.非常感谢。

I think your are missing something fundamental here.我认为你在这里缺少一些基本的东西。 Object loading is an asynchronous process so if you call objects.length somewhere outside your callback method it will most likely return 0 for the array length since your palm tree has not been loaded yet.对象加载是一个异步过程,因此如果您在回调方法之外的某处调用objects.length它很可能会为数组长度返回0 ,因为您的棕榈树尚未加载。

But try once to check objects.length in the callback for example like this:但是尝试一次检查回调中的objects.length例如像这样:

var mtlLoader = new THREE.MTLLoader();
mtlLoader.load("objects/palmtree.mtl", function(materials) {
    materials.preload();
    var objLoader = new THREE.OBJLoader();
    objLoader.setMaterials(materials);
    objLoader.load("objects/palmtree.obj", function(palmtree) {
        palmtree.position.x = 205.12577753354344;
        palmtree.position.y = 2;
        palmtree.position.z = -600.0613083252872;
        palmtree.scale.x = 64;
        palmtree.scale.y = 64;
        palmtree.scale.z = 64;
        scene.add(palmtree);
        objects.push( palmtree );
        console.log(objects.length); // <-- will output new length
    });
});

In this case it will output 1 .在这种情况下,它将输出1

So the array length will only return 1 after your loading process has finished and the callback has been executed.因此,在加载过程完成并执行回调后,数组长度只会返回1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM