0

新しい画像をロードできる機能があります。その関数に、その画像が読み込まれたことを検出する関数を作成し、それを配列またはオブジェクトに格納したいと思います。配列またはオブジェクトを調べて、それぞれがロードされているかどうかを確認する別の関数があります。

私の質問は、新しい関数をそれぞれ配列に追加し、チェックするように設定されている画像が読み込まれているかどうかをそれぞれに返すにはどうすればよいですか?

** 編集 **

画像をロードする関数に名前を渡し、ロードして'images/'+name+'.png'から、その名前をキーの名前として配列またはオブジェクトに渡したいと思います。

** Shawn31313への返信:これが私が持っているものの基本です:

var resources = {
    // I have other stuff to load here
    'newImg': function(name) {
        if (name) {
            var img = new Image();
            img.src = 'images/' + name + '.png';
            imgLoadingArray[name] = function () {
                var loaded = false;
                // detect image loading some how
            }
        }
    },
    'imgLoadingArray': {},
    'loaded': function() {
        var loaded = true;
        for (each in game.resources.imgLoadingArray) {
            if (each == 'false') {
                loaded = false;
            }
            return loaded;
        }
    }
}
4

3 に答える 3

2

配列またはオブジェクトに値を設定するonloadリスナーが画像に必要なだけのように思えます。各画像に一意の名前がある場合、次のようになります。

var imageLoaded = {};

...

'newImg': function(name) { 
    if (name) { 
        var img = new Image(); 
        img.src = 'images/' + name + '.png';
        img.name = name;
        imageLoaded[name] = false;
        img.onload = function() {imageLoaded[this.name] = true;};
        ...
     }
  },
  ...

テストされていません。

于 2012-07-27T01:28:08.727 に答える
1

辞書を作成できます。

var actions = [];

function createAction(name) {
 actions[name] = function() {alert('Hi from:'+ name);};
}

createAction('hello world');

actions['hello world']();
于 2012-07-27T00:53:10.740 に答える
0

私はちょうど気づきました...なぜ変数があるのですか?ロードするオブジェクトにすべてを投げるだけです!

var resources = {
    // load some other stuff
    'newImg': function(name) {
        if (name) {
            game.resources.imgLoading[name] = new Image();
            game.resources.imgLoading[name].src = 'images/' + name + '.png';
            game.resources.imgLoadedCheck[name] = false;
            game.resources.imgLoading[name].onload = function() {game.resources.imgLoadedCheck[name] = true;};
        }
    },
    'imgLoading': {},
    'imgLoadedCheck': {},
    'loaded': function() {
        var loaded = true;
        for (each in game.resources.imgLoadingArray) {
            if (each == 'false') {
                loaded = false;
            }
            return loaded;
        }
    }
};
于 2012-07-27T15:10:33.157 に答える