使用FontLoader函数未定义全局数组

时间:2018-11-08 13:18:51

标签: three.js

我还很新,希望有人可以帮助解决这个琐碎的问题:) 该数组是全局定义的var textMeshes = [];,并且具有在特定位置生成文本的函数该函数可以工作,但是我无法通过索引访问该数组,但出现控制台错误,即未定义textMeshes。但是,如果我将textMeshes console.log(textMeshes)记录为孔阵列,则会看到该阵列已填充。 console.log(textMeshes[0])导致未定义。我猜问题是因为fontLoader加载了asyncron,但是如果我错了=,请纠正我。非常感谢您的帮助!

function addTextToScene (posX, posY, posZ, i){

                var fontLoader = new THREE.FontLoader();
                fontLoader.load( 'fonts/droid/droid_sans_regular.typeface.json', function ( font ) {

                    var textGeometry = new THREE.TextGeometry( '#' + i, {
                        font: font,
                        size: 16,
                        height: 5,
                        curveSegments: 12,
                        bevelEnabled: true,
                        bevelThickness: 1,
                        bevelSize: 0,
                        bevelSegments: 5
                    } );


                 textMesh = new THREE.Mesh( textGeometry, textMaterial );

                 var textMaterial = new THREE.MeshPhongMaterial({ color: 0xff0000, specular: 0xffffff, shininess: 100, emissive: 0xffffff});

                 textMesh.position.x = posX;
                 textMesh.position.y = posY+50;
                 textMesh.position.z = posZ-50;

                 textMeshes.push( textMesh );
                 scene.add( textMesh );


                } );




            }

1 个答案:

答案 0 :(得分:0)

您是正确的:FontLoader.load()回调是异步的,因此textMeshes将一直为空,直到其内容加载完毕。只有这样,此行才会发生:

textMeshes.push( textMesh );

在此之前,textMeshes[0]将是undefined,因为texMeshes里面没有任何内容。它的长度为0。

这不是Three.js问题,而是更多的AJAX问题。您应该阅读此讨论以更熟悉以下主题:How do I return the response from an asynchronous call?