我还很新,希望有人可以帮助解决这个琐碎的问题:)
该数组是全局定义的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 );
} );
}
答案 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?