0

OBJMesh モデル リーダーを作成しようとしていて、OBJMesh クラスをセットアップしましたが、OBJMesh オブジェクトを作成して get 関数を呼び出して配列に格納されたデータを取得しようとすると、それが行われません。

これがコードです

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];

}

「未定義」を出力し続けるだけです。なぜですか?どうすれば修正できますか??

4

1 に答える 1

1

しかし、onreadystatechange は async-Call のようですので、

this.init = true;

関数 onreadystatechange が呼び出される前に設定されます。

onreadystatechange 関数の最後に設定できるかもしれません

objmesh.init = true;

これが役立つことを願っています

于 2013-01-24T10:38:21.113 に答える