canvasで役立つ?こんなローダーどうざんしょ??

あちらを立てたらこちらが立たず。
前記事のローダとメインループを使って間にcharacter関数を入れると、処理の終了順序の関係でcharacterに正しくイメージが渡されないようなので、ローダを更に修正しました。
描画処理の説明です。
まず、セットインターバルが実行され、変数mainloopが実行されます。
mainloopにはloadflg変数をチェックするif文が入っていて、このフラグがtrueになるまで何もしません。

var loadflg = false;
//描画処理
start = function(){
var main = function(){
//この部分が描画処理を担当。
};
var loadcheck = function(){
//画像のロードのチェック関数。falseならループ、trueならmainへ
if(loadflg){
//ここでシーンの変数を格納??
mainloop = main();
}else{
};
};
var mainloop = loadcheck;
main_interval = window.setInterval(mainloop, 40);
};

ロード処理の説明です。
imgLoaderのiload()関数に引数で画像のアドレスを渡します。
まず、引数が配列なのかどうかを確かめたかったのですが、typeof Arrayってのは無いんですね -_-
なのでそこは、それっぽいのを書いておいて・・・
今回の成果はここからです。
まず、for文を使ってロードの終了を待たずにnew Imageとこれのsrcを設定します。
(new Imageとこれに対するsrcさえ設定しておけばロードが終わっていなくても平気!)
次にロード終了時に呼び出されるonload処理で、いくつの画像がロード済みなのかをカウントします。
そして、カウントが引数で渡された画像の個数と同じになるとloadflgがtrueになります。
そうしたら、描画処理が実行される・・・

//画像のロード処理
var imgLoader = function(){
this.moto = 0;//処理前画像の個数
this.loaded = 0;//ロード終了済み画像の個数

this.img = new Array;//処理済み画像を格納
this.img.length = 0;//処理済み画像の個数

return this;
};
imgLoader.prototype = {
iload:function(arr){
if( typeof arr==='object' && arr.length>0 ){
var filecheck = /(\.(jpg|jpeg|png|gif|bmp))$/i,
nhk = arr,
nlen = nhk.length,

fimg = this.img,
flen = fimg.length,

count = this.loaded;

for(var i=0; i>nlen; i++){
var name = nhk[i];
if(filecheck.test(name)){
var targ = fimg[name] = new Image();
targ.src = name +'?'+ new Date().getTime();
targ.onload = function(){
count ++;
if(!(count<nlen)){
loadflg = true;
};
};
};

};
}else{
//arrが配列でなかった場合の処理
};
},
};
Category: プログラム ゲーム作成

コメント

コメントの投稿

トラックバック