ТРИ.в JS объекты в obj загрузчик

У меня проблема с доступом к объекту за пределами границ событий. Если я помещаю объект в массив и проверяю этот массив, массив также пуст, но в области событий он заполнен. Мне нужно знать, как я могу получить доступ к объекту за пределами области событий.

for (var i = 0; i < 19; i++){
    var loader = new THREE.OBJMTLLoader();

    loader.addEventListener( 'load', function ( event ) {
        var tree = event.content;
        myWorld.setWorldTreePosition(multiplier);

        tree.position.y = 0;
        tree.position.x = myWorld.myTreePosition.position.x;
        tree.position.z =  myWorld.myTreePosition.position.z;
        tree.rotation.x = -(Math.PI / 2);
        tree.scale.set(10,5,5);
        scene.add( tree );
        collidableMeshList2.push(tree);

        tree.castShadow = true;
        //collidableMeshList.push(tree);
        multiplier += 500;

        console.log(collidableMeshList2); // here it is full of trees.
    }
);

loader.load( 'obj/Palm_Tree.obj', 'obj/Palm_Tree.mtl' );
//outside this all becomes empty.

console.log(collidableMeshList2); // here is list is empty but I don't know why.

1 ответов


дело не в области; она пуста, потому что вам нужно дождаться загрузки загрузчиком объекта, прежде чем вы увидите деревья там - что и делает addEventListener("load"). Последняя строка фрагмента кода выполняется перед функцией загрузки.

ваш фрагмент кода сбивает с толку, не сразу видно, что вы пытаетесь сделать с циклом for. Вы создаете много загрузчиков и прикрепляете к ним прослушиватель событий загрузки. Но ваш заряжающий.load () вызов после цикл, поэтому он будет применяться к последнему загрузчику. Вероятно, вы захотите переместить создание объекта загрузчика за пределы цикла for или загрузчика.загрузите вызов внутри цикла.