###前提・実現したいこと
Javascriptにて、
配列の各要素について、コールバック処理を待ってデータの代入をしようとしています。
コールバック処理の内容はデータのロードです。
model_data.Get_LoadState()でデータロードの状態を参照しています。
###発生している問題・エラーメッセージ
単独の変数に対してコールバック処理を待って代入することはできましたが、
その処理を配列各要素に対して行う処理について記述できません。
###単一変数での場合:
var Model;
var A = new ClassA();
function waitforload() {
if (A.model_data.Get_LoadState() == false) {
setTimeout(waitforload, 10);
return;
}
Model = A.model_data.Get_Model();
}
waitforload();
###行いたい処理
var Model = new Array();
for(i=0;i<model_data.lungth;i++){
var A = new ClassA();
function waitforload() {
if (A.model_data.Get_LoadState() == false) {
setTimeout(waitforload, 10);
return;
}
Model[i] = A.model_data.Get_Model();
}
}
waitforload();
###デバッグ時に確認できたこと、
Model[i] = model_data[i].Get_Model();
が実行されるときには、iが範囲外となり、参照うまくいきません。
コードは一部本来のものとは異なっております。
非常に困っておりまして、ご回答いただけるとありがたいです。
###追記
three.jsを用いてjson形式で書きだしたデータをファイル名で読み出して、
取得データからメッシュを返すクラスを作りました。
C_Model = function() {
//ジオメトリを保持
this.Geometory = null;
//マテリアルを保持
this.Material = null;
//パーツ読み込み完了フラグ
this.LoadFlag = false;
//パーツファイル名
this.JSONfilename = false;
};
//保持しているジオメトリとマテリアルでメッシュを作って返す。
C_Model.prototype.Get_Model = function () {
var tmp = new THREE.Mesh(this.Geometory, this.Material);
return tmp;
};
//指定されたファイル名に基づいて、ジオメトリとマテリアルを取得
C_Model.prototype.Load_Model = function (JSONfilename) {
this.JSONfilename = JSONfilename;
var loader = new THREE.JSONLoader();
var obj = this;
var func = function (Geometory, Material) {
obj.Collback(Geometory, Material);
}
loader.load(JSONfilename, func);
};
C_Model.prototype.Collback = function(Geometory, Material) {
//console.log(Geometory);
//console.log(Material);
this.Geometory = Geometory;
this.Material = new THREE.MeshFaceMaterial(Material); this.LoadFlag = true; console.log("LOAD-"+this.JSONfilename+"-FINISH");
};
C_Model.prototype.Get_LoadState= function(){
return this.LoadFlag;
};
このクラスを用いて複数データのメッシュデータを得て、
それを配列要素に一つづつ読み込もうとしています。
こちらのクラスを使用して単一のモデルを読むだけであれば、
var model_data = new C_Model();
var Model = null;
model_data.Load_Model("model.json");
function waitforload() {
if (model_data.Get_LoadState() == false) {
setTimeout(waitforload, 10);
return;
}
Model = model_data.Get_Model();
scene.add(Model);
}
waitforload();
とすることでModelにデータを読み込めています。
modelを配列化してそれぞれにデータの取り込みをしたいと考えています。
回答3件
あなたの回答
tips
プレビュー