<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【CSON原創】HTML5游戲框架cnGameJS開發實錄(資源加載模塊篇)

      返回目錄

      1.功能  

        該模塊是游戲的入口,我們通過該模塊加載資源,并且在資源加載完成后調用游戲對象的入口函數。另外該模塊還包括游戲場景之間的切換,以及加載百分比的計算和顯示。

        當開始游戲時,首先傳入需要加載的資源列表,然后傳入游戲對象,最后傳入每個資源加載完成后調用的函數,該函數可以獲取加載的百分比。如下:

      cnGame.loader.start(["src1","src2","src3"],gameObj,function(loadedPercent){});

        這樣的話,會先加載前面傳入的三個圖像資源,并且每次加載完一張圖片,就調用后面的回調函數,該函數可以獲取加載的百分比,實現加載界面,告訴用戶目前加載的進度之類的功能。當加載完成后,調用游戲對象gameObj的intialize方法,開始游戲。

      2.具體實現:

        首先我們看看加載器的代碼:

          /**
      *圖像加載器
      *
      */
      var loader={
      sum:0, //圖片總數
      loadedCount:0, //圖片已加載數
      loadingImgs:{}, //未加載圖片集合
      loadedImgs:{}, //已加載圖片集合
      /**
      *圖像加載,之后啟動游戲
      *
      */
      start:function(src,gameObj,onLoad){//可傳入src數組或單個src "xxx.jpg" or ["xxx.jpg","ggg,gif","www.png"]

      if(cg.core.isArray(src)){
      this.sum=src.length;
      for(var i=0,len=src.length;i<len;i++){
      this.gameObj=gameObj;
      this.onLoad=onLoad;
      this.loadingImgs[src[i]]=new Image();
      this.loadingImgs[src[i]].onload=imgLoad(this);
      this.loadingImgs[src[i]].src=src[i];
      this.loadingImgs[src[i]].srcPath=src[i];//沒有經過自動變換的src
      }

      }

      }

      }

        首先,資源加載器保存如下幾個字段:已加載資源的列表,未加載資源的列表,資源總數,已加載總數。當調用start方法,加載器就開始遍歷圖片src數組,并生成image對象進行加載。另外我們需要為每個圖片對象保存srcPath,該參數為原始的src參數(因為默認情況下瀏覽器會把src參數轉換成完整的圖片路徑)。之后就是為每張圖片添加onLoad的處理程序,我們需要在該處理程序中進行加載百分比的計算,以及把加載好的圖片對象保存進loadedImgs對象,方便用戶后續使用。圖片加載的處理程序如下:

          /**
      *圖像加載完畢的處理程序
      *
      */
      var imgLoad=function(self){
      return function(){
      self.loadedCount+=1;
      self.loadedImgs[this.srcPath]=this;
      this.onLoad=null; //保證圖片的onLoad執行一次后銷毀
      self.loadedPercent=Math.floor(self.loadedCount/self.sum*100);
      self.onLoad&&self.onLoad(self.loadedPercent);
      if(self.loadedPercent===100){
      self.loadedCount=0;
      self.loadedPercent=0;
      loadingImgs={};
      if(self.gameObj&&self.gameObj.initialize){
      self.gameObj.initialize();
      if(cg.loop&&!cg.loop.stop){//結束上一個循環
      cg.loop.end();
      }
      cg.loop=new cg.GameLoop(self.gameObj);//開始新游戲循環
      cg.loop.start();
      }

      }


      }
      }

        每張圖片加載完成后,加載數量加1,把該圖像對象保存,并且計算加載完成的百分比。最后還需要刪除該圖像的處理程序(因為圖像已加載完成,處理程序已無用,可以釋放掉節約內存資源)。當加載百分比為100%,則重置所有值,并釋放loadingImgs,為下次加載資源所用,另外,還會啟動游戲循環(游戲循環負責每幀對所有游戲對象的更新和繪制,詳情請見:HTML5游戲框架cnGameJS開發實錄(游戲循環篇))。

        附上加載器所有源碼:

      /**
      *
      *資源加載器
      *
      *
      */
      cnGame.register("cnGame",function(cg){

      /**
      *圖像加載完畢的處理程序
      *
      */
      var imgLoad=function(self){
      return function(){
      self.loadedCount+=1;
      self.loadedImgs[this.srcPath]=this;
      this.onLoad=null; //保證圖片的onLoad執行一次后銷毀
      self.loadedPercent=Math.floor(self.loadedCount/self.sum*100);
      self.onLoad&&self.onLoad(self.loadedPercent);
      if(self.loadedPercent===100){
      self.loadedCount=0;
      self.loadedPercent=0;
      loadingImgs={};
      if(self.gameObj&&self.gameObj.initialize){
      self.gameObj.initialize();
      if(cg.loop&&!cg.loop.stop){//結束上一個循環
      cg.loop.end();
      }
      cg.loop=new cg.GameLoop(self.gameObj);//開始新游戲循環
      cg.loop.start();
      }

      }


      }
      }
      /**
      *圖像加載器
      *
      */
      var loader={
      sum:0, //圖片總數
      loadedCount:0, //圖片已加載數
      loadingImgs:{}, //未加載圖片集合
      loadedImgs:{}, //已加載圖片集合
      /**
      *圖像加載,之后啟動游戲
      *
      */
      start:function(src,gameObj,onLoad){//可傳入src數組或單個src "xxx.jpg" or ["xxx.jpg","ggg,gif","www.png"]

      if(cg.core.isArray(src)){
      this.sum=src.length;
      for(var i=0,len=src.length;i<len;i++){
      this.gameObj=gameObj;
      this.onLoad=onLoad;
      this.loadingImgs[src[i]]=new Image();
      this.loadingImgs[src[i]].onload=imgLoad(this);
      this.loadingImgs[src[i]].src=src[i];
      this.loadingImgs[src[i]].srcPath=src[i];//沒有經過自動變換的src
      }

      }

      }

      }


      this.loader=loader;
      });



      posted @ 2012-02-14 12:41  Cson  閱讀(3466)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 久久精品波多野结衣| 巨大黑人极品videos精品| 久播影院无码中文字幕| 一区二区三区四区亚洲自拍| 精品在线观看视频二区| 四虎国产精品永久入口| 又湿又紧又大又爽A视频男| 国产一区二区不卡91| 无码人妻丰满熟妇啪啪| 久久精品国产色蜜蜜麻豆| 无码高潮爽到爆的喷水视频app | 人妻色综合网站| 欧美黑人又粗又大又爽免费| 在线午夜精品自拍小视频| 欧美日韩亚洲国产| 色成人亚洲| 国产老熟女乱子一区二区| 秋霞人妻无码中文字幕| 不卡一区二区国产在线| 国产成人精品久久一区二区| 国产嫩草精品网亚洲av| 亚洲av成人一区在线| 亚洲精品中文字幕二区| 国产精选一区二区三区| 国产一区二区日韩在线| 成人福利国产午夜AV免费不卡在线 | 天堂www在线中文| 97人妻精品一区二区三区| 九九热在线视频精品免费| av人摸人人人澡人人超碰下载| 激情综合五月丁香亚洲| 久久综合97丁香色香蕉| 国产大学生粉嫩无套流白浆| 亚洲AV成人片不卡无码| 少妇熟女久久综合网色欲| 亚洲中文字幕精品久久| 深夜福利成人免费在线观看| 日韩国产精品无码一区二区三区| 国产亚洲婷婷香蕉久久精品| 小伙无套内射老熟女精品| 亚洲色一色噜一噜噜噜|