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 回答