2013-01-24 4 views
0

OBJMesh 모델 판독기를 쓰려고하는데 OBJMesh 클래스를 설정했지만 OBJMesh 객체를 만들고 배열을 호출하여 저장된 데이터를 검색하려고하면 get 기능, 그것을하지 않습니다.javascript - 배열 데이터를 검색 할 수 없습니다.

여기

OBJMesh.js

function OBJMesh(file) 
{ 
    this.modelVertex = []; 
    this.modelColor = []; 
    this.init = false; 

    var rawFile = new XMLHttpRequest(); 
    rawFile.open("GET", file, true); 

    var objmesh = this; 
    rawFile.onreadystatechange = function() 
    { 

     if(rawFile.readyState == 4) 
     { 
      if(rawFile.status === 200 || rawFile.status === 0) 
      { 
       var allText = rawFile.responseText; 
       var lines = allText.split("\n"); 


       for(var i = 0; i < lines.length; i ++) 
       { 
        var lineData = lines[i]; 
        var lineString = lineData.split(" "); 

        if(lineString[0] === "v") 
        { 

         var x = parseFloat(lineString[1]); 
         var y = parseFloat(lineString[2]); 
         var z = parseFloat(lineString[3]); 

         objmesh.modelVertex.push(x); 
         objmesh.modelVertex.push(y); 
         objmesh.modelVertex.push(z); 

         objmesh.modelColor.push(0.0); 
         objmesh.modelColor.push(0.0); 
         objmesh.modelColor.push(0.0); 
         objmesh.modelColor.push(1.0); 

         //document.getElementById("textSection").innerHTML = objmesh.modelVertex[0]; 
        } 
       } 
      } 
     } 
     objmesh.init = true; 
    } 

    rawFile.send(); 
} 

OBJMesh.prototype.getModelVertex = function() 
{ 
    return this.modelVertex; 
}; 

OBJMesh.prototype.getModelColor = function() 
{ 
    return this.modelColor; 
}; 

OBJMesh.prototype.getInit = function() 
{ 
    return this.init; 
}; 

main.js

var cubeModel; 

function main() 
{ 
    cubeModel = new OBJMesh("file:///Users/DannyChen/Desktop/3DHTMLGame/cube.obj"); 

    while(cubeModel.getInit() === false) 
    { 
     //wait for it 
    } 

    var cubeVertex = cubeModel.getModelVertex(); 

    document.getElementById("textSection").innerHTML = cubeVertex[0]; 

} 

그냥 "정의되지 않은"밖으로 인쇄 유지 코드를합니다. 왜 그거야? 어떻게 해결할 수 있습니까 ??

답변

1

는하지만 기능을 onreadystatechange 호출하기 전에

this.init = true; 

가 설정됩니다, 그래서 비동기 호출을 onreadystatechange 것 같다.

당신이 onreadystatechange의 기능 내가이 힌트에 대한

+0

Mank 덕분에 도움이되기를 바랍니다

objmesh.init = true; 

의 끝에서 설정할 수 있습니다 될 수 있습니다. 그러나 onreadystatechange 함수 다음에 init을 true로 설정하면 여전히 문제가 남아 있습니다. 주변에 또 다른 사람이 있습니까 ?? – Danny

+0

줄을 // document.getElementById ("textSection"). innerHTML = objmesh.modelVertex [0]; _ 사용자가 주석으로 값을 반환 할 때? –

+0

죄송합니다. 지금 분류했습니다. 다시 한 번 감사드립니다 – Danny

관련 문제