预加载资源


在游戏开发中,会涉及到各种资源的预加载,比如图片素材、声音音效、各种数据等等。Hilo提供了一个简单的资源加载队列工具LoadQueue

创建加载队列

var queue = new Hilo.LoadQueue();
queue.maxConnections = 2; //设置同时下载的最大连接数,默认为2

增加下载资源

使用 LoadQueue.add(item) 方法可以增加资源对象到下载队列。比如:

queue.add({id:'bg', src:'images/bg.png'});

其中,每个资源对象item包含以下属性:

此外,LoadQueue.add 方法还支持多个item的数组参数。比如:

queue.add([
    {id:'bg', size:100, noCache:true, src:'images/bg.png'},
    {id:'logo', size:100, noCache:true, src:'images/logo.png'},
    {id:'data', size:300, noCache:true, type:'jsonp', src:'http://Hilo.com/jsonp.js'}
]);

监听下载进度

LoadQueue 有3种事件可供监听。

queue.on('load', function(e){
    //console.log('load:', e.detail);
});
queue.on('error', function(e){
    //console.log('error:', e.detail);
});
queue.on('complete', function(e){
    //console.log('complete:', queue.getLoaded());
});

获取下载信息

LoadQueue 提供了一些方法,获取下载队列的情况:

比如队列下载完成后获取某个资源的下载内容:

queue.on('complete', function(e){
    var bg = queue.getContent('bg');
    console.log(bg);
});

自定义下载器

当前 LoadQueue 仅提供了图片下载器 ImageLoader 和js/jsonp加载器 ScriptLoader。若要加载其他资源,可通过加载资源的loader属性来自定义下载器。其中loader要实现以下3个方法:

下面的示例演示了自定义加载css的加载器:

queue.add({id:'dummy_css', type:'css', src:'http://Hilo.com/dummy.css', loader:{
    load: function(data){
        var link = document.createElement('link');
        link.type = 'text/css';
        link.rel = 'stylesheet';
        if(data.id) link.id = data.id;
        link.addEventListener('load', this.onLoad.bind(this), false);
        link.addEventListener('error', this.onError.bind(this), false);
        link.href = data.src;
        document.getElementsByTagName('head')[0].appendChild(link);
    },
    onLoad: function(e){
        return e.target;
    },
    onError: function(e){
        return e;
    }
}});