/* loader.js:负责对资源的加载 */ "use strict"; function loader() { this.init(); } loader.prototype.init = function () { } ////// 设置加载进度条进度 ////// loader.prototype.setStartProgressVal = function (val) { core.dom.startTopProgress.style.width = val + '%'; } ////// 设置加载进度条提示文字 ////// loader.prototype.setStartLoadTipText = function (text) { core.dom.startTopLoadTips.innerHTML = text; } loader.prototype.load = function (callback) { // 加载icons core.loader.loadIcons(); // 加载图片 core.loader.loadImages(core.materials, core.material.images, function () { // 加载png图片 core.material.images.images = {}; var images = core.clone(core.images); if (images.indexOf("hero.png")<0) images.push("hero.png"); core.loader.loadImages(images, core.material.images.images, function () { // 加载autotile core.material.images.autotile = {}; var keys = Object.keys(core.material.icons.autotile); var autotiles = {}; core.loader.loadImages(keys, autotiles, function () { keys.forEach(function (v) { core.material.images.autotile[v] = autotiles[v]; }); setTimeout(function () { core.maps.makeAutotileEdges(); }); // 加载tilesets core.material.images.tilesets = {}; if (!core.isset(core.tilesets)) core.tilesets = []; core.loader.loadImages(core.clone(core.tilesets), core.material.images.tilesets, function () { // 检查宽高是32倍数,如果出错在控制台报错 for (var imgName in core.material.images.tilesets) { var img = core.material.images.tilesets[imgName]; if (img.width%32!=0 || img.height%32!=0) { console.warn("警告!"+imgName+"的宽或高不是32的倍数!"); } if (img.width * img.height > 32*32*1000) { console.warn("警告!"+imgName+"上的图块素材个数大于1000!"); } } core.loader.loadAnimates(); core.loader.loadMusic(); if (core.isset(callback)) callback(); }) }) }) }) } loader.prototype.loadIcons = function () { this.loadImage("icons.png", function (id, image) { var images = core.cropImage(image); for (var key in core.statusBar.icons) { if (typeof core.statusBar.icons[key] == 'number') { core.statusBar.icons[key] = images[core.statusBar.icons[key]]; if (core.isset(core.statusBar.image[key])) core.statusBar.image[key].src = core.statusBar.icons[key].src; } } }); } loader.prototype.loadImages = function (names, toSave, callback) { if (!core.isset(names) || names.length==0) { if (core.isset(callback)) callback(); return; } var items = 0; for (var i=0;i0) core.playBgm(core.bgms[0]); } loader.prototype.loadOneMusic = function (name) { var music = new Audio(); music.preload = 'none'; if (main.bgmRemote) music.src = main.bgmRemoteRoot+core.firstData.name+'/'+name; else music.src = 'project/sounds/'+name; music.loop = 'loop'; core.material.bgms[name] = music; } loader.prototype.freeBgm = function (name) { if (!core.isset(core.material.bgms[name])) return; // 从cachedBgms中删除 core.musicStatus.cachedBgms = core.musicStatus.cachedBgms.filter(function (t) {return t!=name; }); // 清掉缓存 core.material.bgms[name].removeAttribute("src"); core.material.bgms[name].load(); core.material.bgms[name] = null; if (name == core.musicStatus.playingBgm) { core.musicStatus.playingBgm = null; } // 三秒后重新加载 setTimeout(function () { core.loader.loadOneMusic(name); }, 3000); } loader.prototype.loadBgm = function (name) { if (!core.isset(core.material.bgms[name])) return; // 如果没开启音乐,则不预加载 if (!core.musicStatus.bgmStatus) return; // 是否已经预加载过 var index = core.musicStatus.cachedBgms.indexOf(name); if (index>=0) { core.musicStatus.cachedBgms.splice(index, 1); } else { // 预加载BGM core.material.bgms[name].load(); // 清理尾巴 if (core.musicStatus.cachedBgms.length == core.musicStatus.cachedBgmCount) { this.freeBgm(core.musicStatus.cachedBgms.pop()); } } // 移动到缓存最前方 core.musicStatus.cachedBgms.unshift(name); }