API Docs for: 1.10.1 最后更新日期:2016年03月28日
Google搜索   
Show:

File: system/LLoadManage.js

  1. /** @language chinese
  2. * LLoadManage类是可以用来同时读取图片,文本以及js多种类型的文件。
  3. * @class LLoadManage
  4. * @constructor
  5. * @since 1.4.0
  6. * @public
  7. */
  8. var LLoadManage = (function () {
  9. function LLoadManage(){
  10. var s = this;
  11. LExtends(s, LEventDispatcher, []);
  12. s.llname="ll.file.";
  13. s.llload="ll.load.";
  14. }
  15. p = {
  16. /** @language chinese
  17. * 从指定的 list 加载数据。
  18. * @method load
  19. * @param {Array} list 指定的需要加载数据的数组。
  20. * <p>list元素的格式如下</p>
  21. * <table>
  22. * <tr><th>文件类型</th><th>格式</th></tr>
  23. * <tr><td>js文件</td><td>{path:"./js/GameBody.js",type:"js"}。1.9.1以上版本,type可以省略。</td></tr>
  24. * <tr><td>图片文件</td><td>{name:"testimg",path:"./images/testimg.png"}。</td></tr>
  25. * <tr><td>图片文件</td><td>{name:"testimg",path:"./images/testimg.png",useXHR:true}</td></tr>
  26. * <tr><td>文本文件</td><td>{name:"testfile",path:"./files/testfile.txt",type:"text"}。1.9.1以上版本,扩展名为"txt"的时候,type可以省略。</td></tr>
  27. * <tr><td>音频文件(需要服务器支持)</td><td>{name:"testSound",path:"./sounds/testsound.wav",type:"sound"}。1.9.1以上版本,音频文件扩展名为"mp3", "ogg", "wav", "m4a"的时候,type可以省略。</td></tr>
  28. * </table>
  29. * @example
  30. * var loadData = [
  31. * {path:"./js/jsfile01.js",type:"js"},
  32. * {path:"./js/jsfile02.js",type:"js"},
  33. * {name:"img0",path:"./images/img0.png"},
  34. * {name:"img1",path:"./images/img1.png"},
  35. * {name:"myFont",path:"NotoSans.eot,NotoSans.ttf",type:"font"},
  36. * {name:"text01",path:"./files/text01.txt",type:"text"},
  37. * {name:"text02",path:"./files/text02.txt",type:"text"},
  38. * {name:"sound01",path:"./sounds/sound01.wav",type:"sound"},
  39. * {name:"sound02",path:"./sounds/sound02.wav",type:"sound"}
  40. * ];
  41. * var loadingLayer;
  42. * var datalist=[];
  43. * function main(){
  44. * loadingLayer = new LoadingSample4();
  45. * addChild(loadingLayer);
  46. * var loadManage = new LLoadManage();
  47. * loadManage.addEventListener(LEvent.PROGRESS, progressFunc);
  48. * loadManage.addEventListener(LEvent.ERROR, errorFunc);
  49. * loadManage.addEventListener(LEvent.COMPLETE, completeFunc);
  50. * loadManage.load(loadData);
  51. * }
  52. * function completeFunc (event) {
  53. * datalist = event.target;
  54. * removeChild(loadingLayer);
  55. * loadingLayer = null;
  56. * //do something
  57. * var bitmapData = new LBitmapData(datalist["img0"]);
  58. * var txt = datalist["text01"];
  59. * var sound = new LSound();
  60. * sound.load(datalist["sound01"]);
  61. * sound.play();
  62. * }
  63. * function progressFunc (event) {
  64. * var progress = (event.loaded * 100 / event.total).toFixed(2);
  65. * loadingLayer.setProgress(progress);
  66. * }
  67. * function errorFunc (event) {
  68. * trace("error url:" + event.responseURL);
  69. * }
  70. * @public
  71. * @since 1.4.0
  72. * @examplelink <p><a href="../../../api/LLoadManage/load.html" target="_blank">测试链接</a></p>
  73. */
  74. load : function (l, u, c) {
  75. var s = this;
  76. if (!l || l.length == 0) {
  77. var event = new LEvent(LEvent.COMPLETE);
  78. event.currentTarget = s;
  79. event.target = {};
  80. s.dispatchEvent(event);
  81. return;
  82. }
  83. s.list = l, s.onupdate = u, s.oncomplete = c;
  84. s.loader = s, s.index = 0, s.loadIndex = 0, s.result = [], s.lresult = [];
  85. s.loadInit();
  86. },
  87. loadInit : function () {
  88. var s = this;
  89. if(s.index >= s.list.length){
  90. return;
  91. }
  92. s.loadIndex = 0;
  93. s.loadStart();
  94. },
  95. loadStart : function () {
  96. var s = this, d, ph, phs, ext;
  97. if (s.loadIndex >= s.list.length) {
  98. return;
  99. }
  100. d = s.list[s.loadIndex];
  101. d.progress = 0;
  102. if (!d.name) {
  103. d.name = s.llname + s.loadIndex;
  104. }
  105. if (!s.lresult[s.llload + d.name]) {
  106. if (!d["type"]) {
  107. ext = getExtension(d.path);
  108. if (ext == "txt") {
  109. d["type"] = LURLLoader.TYPE_TEXT;
  110. } else if (ext == "js") {
  111. d["type"] = LURLLoader.TYPE_JS;
  112. } else if ((new Array("mp3", "ogg", "wav", "m4a")).indexOf(ext) >= 0) {
  113. d["type"] = LSound.TYPE_SOUND;
  114. }
  115. }
  116. if (d["type"] == LURLLoader.TYPE_TEXT || d["type"] == LURLLoader.TYPE_JS) {
  117. s.loader = new LURLLoader();
  118. s.loader.parent = s;
  119. s.loader.name = d.name;
  120. s.loader.addEventListener(LEvent.PROGRESS, s._loadProgress);
  121. s.loader.addEventListener(LEvent.ERROR, s._loadError);
  122. s.loader.addEventListener(LEvent.COMPLETE, s._loadComplete);
  123. s.loader.load(s.url(d.path), d["type"]);
  124. } else if (d["type"] == LSound.TYPE_SOUND) {
  125. s.loader = new LSound();
  126. s.loader.parent = s;
  127. s.loader.name = d.name;
  128. s.loader.addEventListener(LEvent.PROGRESS, s._loadProgress);
  129. s.loader.addEventListener(LEvent.ERROR, s._loadError);
  130. s.loader.addEventListener(LEvent.COMPLETE, s._loadComplete);
  131. s.loader.load(d.path);
  132. } else if (d["type"] == LFontLoader.TYPE_FONT) {
  133. s.loader = new LFontLoader();
  134. s.loader.parent = s;
  135. s.loader.name = d.name;
  136. s.loader.addEventListener(LEvent.ERROR, s._loadError);
  137. s.loader.addEventListener(LEvent.COMPLETE, s._loadComplete);
  138. s.loader.load(d.path, d.name);
  139. } else {
  140. s.loader = new LLoader();
  141. s.loader.parent = s;
  142. s.loader.name = d.name;
  143. s.loader.addEventListener(LEvent.PROGRESS, s._loadProgress);
  144. s.loader.addEventListener(LEvent.ERROR, s._loadError);
  145. s.loader.addEventListener(LEvent.COMPLETE, s._loadComplete);
  146. s.loader.load(s.url(d.path), LLoader.TYPE_BITMAPDATE, d.useXHR);
  147. }
  148. s.loader._loadIndex = s.loadIndex;
  149. }
  150. s.loadIndex++;
  151. s.loadStart();
  152. },
  153. _loadProgress : function (e) {
  154. var loader = e.currentTarget;
  155. var s = loader.parent;
  156. d = s.list[loader._loadIndex];
  157. d.progress = e.loaded / e.total;
  158. var progress = 0;
  159. for(var i = 0, l=s.list.length;i<l;i++){
  160. progress += s.list[i].progress;
  161. }
  162. var event = new LEvent(LEvent.PROGRESS);
  163. event.currentTarget = s;
  164. event.target = e.currentTarget;
  165. event.loaded = progress;
  166. event.total = s.list.length;
  167. event.responseURL = e.responseURL;
  168. s.dispatchEvent(event);
  169. },
  170. _loadError : function (e) {
  171. var loader = e.currentTarget;
  172. var s = loader.parent;
  173. delete loader.parent;
  174. loader.removeEventListener(LEvent.ERROR, s._loadError);
  175. var event = new LEvent(LEvent.ERROR);
  176. event.currentTarget = s;
  177. event.target = e.target;
  178. event.responseURL = e.responseURL;
  179. s.dispatchEvent(event);
  180. },
  181. _loadComplete : function (e) {
  182. var s = e.currentTarget.parent;
  183. if(!s){
  184. return;
  185. }
  186. if (e && e.currentTarget.name) {
  187. e.currentTarget.removeEventListener(LEvent.COMPLETE, s._loadComplete);
  188. if (e.currentTarget.name.indexOf(s.llname) >= 0) {
  189. e.target = 1;
  190. }
  191. if (s.lresult[s.llload + e.currentTarget.name]) {
  192. return;
  193. }
  194. s.result[e.currentTarget.name] = e.target;
  195. s.lresult[s.llload + e.currentTarget.name] = 1;
  196. }
  197. s.index++;
  198. e.loaded = e.total = 1;
  199. s._loadProgress(e);
  200. delete e.currentTarget.parent;
  201. if (s.index >= s.list.length) {
  202. var event = new LEvent(LEvent.COMPLETE);
  203. event.currentTarget = s;
  204. event.target = s.result;
  205. s.dispatchEvent(event);
  206. LGlobal.forceRefresh = true;
  207. }
  208. },
  209. url : function (u) {
  210. if (!LGlobal.traceDebug) {
  211. return u;
  212. }
  213. return u + (u.indexOf('?') >= 0 ? '&' : '?') + 't=' + (new Date()).getTime();
  214. }
  215. };
  216. for (var k in p) {
  217. LLoadManage.prototype[k] = p[k];
  218. }
  219. /** @language chinese
  220. * 从指定的 list 加载数据。
  221. * @method LLoadManage.load
  222. * @param {Array} list 指定的需要加载数据的数组。
  223. * <p>list元素的格式如下</p>
  224. * <table>
  225. * <tr><th>文件类型</th><th>格式</th></tr>
  226. * <tr><td>js文件</td><td>{path:"./js/GameBody.js",type:"js"}。1.9.1以上版本,type可以省略。</td></tr>
  227. * <tr><td>图片文件</td><td>{name:"testimg",path:"./images/testimg.png"}。</td></tr>
  228. * <tr><td>图片文件</td><td>{name:"testimg",path:"./images/testimg.png",useXHR:true}</td></tr>
  229. * <tr><td>文本文件</td><td>{name:"testfile",path:"./files/testfile.txt",type:"text"}。1.9.1以上版本,扩展名为"txt"的时候,type可以省略。</td></tr>
  230. * <tr><td>音频文件(需要服务器支持)</td><td>{name:"testSound",path:"./sounds/testsound.wav",type:"sound"}。1.9.1以上版本,音频文件扩展名为"mp3", "ogg", "wav", "m4a"的时候,type可以省略。</td></tr>
  231. * </table>
  232. * @param {function} onUpdate 加载过程中调用的函数,一般用来显示游戏进度。
  233. * @param {function} onComplete list中全部文件加载完成时调用此函数
  234. * @example
  235. * var loadData = [
  236. * {path:"./js/jsfile01.js",type:"js"},
  237. * {path:"./js/jsfile02.js",type:"js"},
  238. * {name:"img0",path:"./images/img0.png"},
  239. * {name:"img1",path:"./images/img1.png"},
  240. * {name:"myFont",path:"NotoSans.eot,NotoSans.ttf",type:"font"},
  241. * {name:"text01",path:"./files/text01.txt",type:"text"},
  242. * {name:"text02",path:"./files/text02.txt",type:"text"},
  243. * {name:"sound01",path:"./sounds/sound01.wav",type:"sound"},
  244. * {name:"sound02",path:"./sounds/sound02.wav",type:"sound"}
  245. * ];
  246. * var loadingLayer;
  247. * var datalist=[];
  248. * function main(){
  249. * loadingLayer = new LoadingSample1();
  250. * addChild(loadingLayer);
  251. * LLoadManage.load(
  252. * loadData,
  253. * function(progress){
  254. * loadingLayer.setProgress(progress);
  255. * },
  256. * gameInit
  257. * );
  258. * }
  259. * function gameInit (result) {
  260. * datalist = result;
  261. * removeChild(loadingLayer);
  262. * loadingLayer = null;
  263. * //do something
  264. * var bitmapData = new LBitmapData(datalist["img0"]);
  265. * var txt = datalist["text01"];
  266. * var sound = new LSound();
  267. * sound.load(datalist["sound01"]);
  268. * sound.play();
  269. * }
  270. * @public
  271. * @static
  272. * @since 1.4.0
  273. * @examplelink <p><a href="../../../api/LLoadManage/index.html" target="_blank">测试链接</a></p>
  274. */
  275. LLoadManage.load = function(l, u, c, e){
  276. var loadObj = new LLoadManage();
  277. if(u){
  278. loadObj.addEventListener(LEvent.PROGRESS, function(event){
  279. u((event.loaded * 100 / event.total).toFixed(2));
  280. });
  281. }
  282. if(c){
  283. loadObj.addEventListener(LEvent.COMPLETE, function(event){
  284. c(event.target);
  285. });
  286. }
  287. if(e){
  288. loadObj.addEventListener(LEvent.ERROR, e);
  289. }
  290. loadObj.load(l);
  291. };
  292. return LLoadManage;
  293. })();