亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript制作坦克大戰全紀錄(2)

2019-11-20 13:51:42
字體:
來源:轉載
供稿:網友

2.   完善地圖

    我們的地圖中有空地,墻,鋼,草叢,水,總部等障礙物。 我們可以把這些全部設計為對象。

2.1  創建障礙物對象群

    對象群保存各種地圖上的對象,我們通過對象的屬性來判斷對象是否可以被穿過或被攻擊。
 
Barrier.js:
 

復制代碼 代碼如下:

 // 障礙物基類對象,繼承自TankObject
 Barrier = function () {
     this.DefenVal = 1;  // 防御力
     this.CanBeAttacked = true;  // 是否可以被攻擊
 }
 Barrier.prototype = new TankObject();
 // 墻
 WallB = function () { }
 WallB.prototype = new Barrier();
 // 空地
 EmptyB = function () {
     this.CanAcross = true;  // 可被穿過
 }
 EmptyB.prototype = new Barrier();
 // 河流
 RiverB = function () {
     this.DefenVal = 0;
     this.CanBeAttacked = false; // 優先取對象的成員,繼承自父類的會被覆蓋。
 }
 RiverB.prototype = new Barrier();
 // 鋼
 SteelB = function () {
     this.DefenVal = 3;
 }
 SteelB.prototype = new Barrier();
 // 草叢對象
 TodB = function () {
     this.CanBeAttacked = false;
     this.DefenVal = 0;
     this.CanAcross = true;
 }
 TodB.prototype = new Barrier();
 // 總部
 PodiumB = function () {
     this.DefenVal = 5;
 }
 PodiumB.prototype = new Barrier();

2.2    寫入地圖的數據。

在Common.js 中添加以下代碼:
 

復制代碼 代碼如下:

 //地圖元素類型枚舉
 /*
 0:空地   
 1:墻   
 2:鋼   
 3:樹叢       
 4:河       
 5:總部   
 */
 var EnumMapCellType = {
     Empty: "0"
     , Wall: "1"
     , Steel: "2"
     , Tod: "3"
     , River: "4"
     , Podium: "5"
 };
 // 每個地形對應的樣式名稱
 var ArrayCss = ['empty', 'wall', 'steel', 'tod', 'river', 'podium'];
 // 關卡地圖
 /*關卡*/
 var str = '0000000000000';
 str += ',0011100111010';
 str += ',1000010000200';
 str += ',1200333310101';
 str += ',0000444400001';
 str += ',3313300001011';
 str += ',3011331022011';
 str += ',3311031011011';
 str += ',0101011102010';
 str += ',0101011010010';
 str += ',0100000000110';
 str += ',0100012101101';
 str += ',0010015100000';
 // 存儲關卡地圖   0,1,2,3... 分別為1-n ... 關
 var Top_MapLevel = [str];

2.3    繪制地圖

    準備工作做完了,下面開始上大菜,繪制地圖。前面有提到我們的地圖為 13 * 13 的表格。所以我們在游戲裝載對象添加行和列兩個屬性,并且添加初始化地圖方法。
 
Frame.js:
 

復制代碼 代碼如下:

 // 游戲載入對象 整個游戲的核心對象
 GameLoader = function () {
     this._mapContainer = document.getElementById("divMap");  // 存放游戲地圖的div
     this._selfTank = null;  // 玩家坦克
     this._gameListener = null; // 游戲主循環計時器id
     /*v2.0新加的屬性*/
     this._level = 1;
     this._rowCount = 13;
     this._colCount = 13;
     this._battleField = []; // 存儲地圖對象二維數組
 }
 // 加載地圖方法
    Load: function () {
         // 根據等級初始化地圖
         var map = Top_MapLevel[this._level - 1].split(",");
         var mapBorder = UtilityClass.CreateE("div", "", "mapBorder", this._mapContainer);
         // 遍歷地圖表格中每一個單元格
         for (var i = 0; i < this._rowCount; i++) {
             // 創建div,每一行的地圖保存在這個div中
             var divRow = UtilityClass.CreateE("div", "", "", mapBorder);
             // 在一維數組中再創建一個數組
             this._battleField[i] = [];
             for (var j = 0; j < this._colCount; j++) {
                 // 讀取地圖數據,默認值:0
                 var v = (map[i] && map[i].charAt(j)) || 0;
                 // 插入span元素,一個span元素即為一個地圖單位
                 var spanCol = UtilityClass.CreateE("span", "", "", divRow);
                 spanCol.className = ArrayCss[v];
                 // 將地圖對象放入二維數組中,便于后面碰撞檢測。
                 var to = null;
                 switch (v) {
                     case EnumMapCellType.Empty:
                         to = new EmptyB();
                         break;
                     case EnumMapCellType.Wall:
                         to = new WallB();
                         break;
                     case EnumMapCellType.Steel:
                         to = new SteelB();
                         break;
                     case EnumMapCellType.Tod:
                         to = new TodB();
                         break;
                     case EnumMapCellType.River:
                         to = new RiverB();
                         break;
                     case EnumMapCellType.Podium:
                         to = new PodiumB();
                         break;
                     default:
                         throw new Error("地圖數字越界!");
                         break;
                 }
                 to.UI = spanCol;
                 //這里的j就是X,因為內部循環是橫向的,x是橫坐標
                 to.XPosition = j;
                 to.YPosition = i;
                 // 將當前的地圖對象存入二維數組中obj為障礙物對象,occupier為占有對象
                 this._battleField[i][j] = { obj: to, occupier: null, lock: false };
             }   //end for
         }   // end for
         // 放入window全局變量
         window.BattleField = this._battleField;
     }

    ok,到這里我們的地圖就大功告成了。 這里的注釋已經很詳細了,如果大家還有不理解的地方自己下載源碼調試一下就很好理解了。

這里主要加載地圖數據,將每一個地圖作為span元素插入html文檔中。并且將地圖的對象存儲在二維數組中。以后我們做碰撞檢測的時候就可以直接通過對象的坐標取到對應的數組對象,十分方便。

附上源碼:http://xiazai.VeVB.COm/201411/yuanma/jstankedazhan(VeVB.COm).rar

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线日韩在线| 亚洲欧美精品suv| 97超视频免费观看| 日韩精品中文字幕视频在线| 日韩视频第一页| 国产日韩欧美在线| 亚洲japanese制服美女| 8x拔播拔播x8国产精品| 日韩在线观看网站| 色偷偷噜噜噜亚洲男人的天堂| 色妞一区二区三区| 国产亚洲精品一区二区| 国产精品视频网站| 亚洲成人黄色在线观看| 久久成人精品一区二区三区| 欧美激情第一页xxx| 亚洲欧美日韩爽爽影院| 欧美丝袜一区二区三区| 97av在线视频免费播放| 亚洲美腿欧美激情另类| 成人精品在线观看| 国产精品一二区| 久久久久久久久久久人体| 成人黄色av网| 国产欧美日韩免费| 91麻豆桃色免费看| 欧美最猛性xxxxx亚洲精品| 欧美激情免费观看| 色综合五月天导航| 久久久久久国产| 久久久久99精品久久久久| 91免费精品视频| 成人激情视频小说免费下载| 亚洲精品乱码久久久久久按摩观| 久热99视频在线观看| 伊人青青综合网站| 中文字幕日韩欧美精品在线观看| 欧美日韩精品国产| 精品一区二区三区四区| 91亚洲精品久久久| 欧美电影免费观看| 日韩av在线直播| 亚洲美女性生活视频| 青青草99啪国产免费| 国产精品亚发布| 国产这里只有精品| 国产这里只有精品| 97精品国产97久久久久久| 9.1国产丝袜在线观看| 日本国产精品视频| 久久久久久久久久亚洲| 亚洲夜晚福利在线观看| 高清视频欧美一级| 亚洲在线第一页| 亚洲欧美一区二区精品久久久| 日韩中文字幕国产| 欧美日本中文字幕| 91久久久亚洲精品| 亚洲精品wwwww| 色偷偷888欧美精品久久久| 日韩在线播放一区| 日韩电影大片中文字幕| 日本高清视频一区| 欧美区二区三区| 亚洲自拍偷拍区| 欧美另类69精品久久久久9999| 97精品伊人久久久大香线蕉| 国产69久久精品成人看| 久久99热这里只有精品国产| 欧美激情奇米色| 亚洲乱码国产乱码精品精| 久久国产精品久久久久久| 国产成人短视频| 午夜精品一区二区三区视频免费看| 国产免费一区二区三区在线能观看| 欧美一区二区三区免费视| 亚洲一级黄色av| 欧美噜噜久久久xxx| 欧美性生活大片免费观看网址| 狠狠色狠狠色综合日日小说| 孩xxxx性bbbb欧美| 亚洲美女视频网站| 欧美日韩国产黄| 欧美激情第99页| 九九久久综合网站| 中文字幕综合一区| 亚洲理论电影网| 午夜精品久久久久久99热软件| 欧美国产一区二区三区| 国产91色在线|| 久久男人的天堂| 亚洲国产精品va| www.日韩免费| 午夜精品久久久久久久男人的天堂| 91色p视频在线| www.亚洲免费视频| 亚洲va久久久噜噜噜| 日韩欧美国产黄色| 欧美黑人xxxx| 欧美性在线观看| 国产亚洲精品久久久| 国产成人精品电影| 日本午夜人人精品| 国产日韩在线一区| 日韩一区二区在线视频| 久久6免费高清热精品| 国产精品日日摸夜夜添夜夜av| 国产精品99久久久久久白浆小说| 国产精品网站视频| 欧美日韩在线影院| 日韩高清中文字幕| 欧美高清不卡在线| 欧美一级高清免费| 日韩欧美亚洲成人| 午夜精品三级视频福利| 中文字幕精品久久久久| 久久69精品久久久久久国产越南| 欧美日韩国产丝袜另类| 亚洲欧美国产精品| 国产精品日韩在线一区| 精品偷拍各种wc美女嘘嘘| 日韩精品免费视频| 国产成人精品免高潮在线观看| 日韩精品视频在线播放| 亚洲欧美日韩中文视频| 国产成人在线播放| 亚洲精品国产精品国自产观看浪潮| 中文字幕久久亚洲| 国产成人av网址| 91在线色戒在线| 欧美夫妻性生活视频| 成人免费视频xnxx.com| 亚洲图片欧洲图片av| 国产精品777| 国产精品成人一区二区| 91在线视频九色| 国产午夜精品麻豆| 日韩av最新在线观看| 午夜精品久久久久久久99热浪潮| 中文字幕在线看视频国产欧美| 亚洲欧美国产日韩天堂区| 狠狠操狠狠色综合网| 91大神在线播放精品| 午夜精品国产精品大乳美女| 国产精品欧美日韩一区二区| 欧美午夜激情视频| 日韩女优在线播放| www.久久久久久.com| 欧美美女15p| 欧美又大粗又爽又黄大片视频| 欧美视频在线观看 亚洲欧| 亚洲国产精品国自产拍av秋霞| 国产精自产拍久久久久久蜜| 精品国产精品三级精品av网址| 国产91免费看片| 亚洲第一福利在线观看| 国产精品户外野外| 久久频这里精品99香蕉| 国产精品入口日韩视频大尺度| 亚洲在线www| 中文字幕欧美精品日韩中文字幕| 国产精品盗摄久久久| 性欧美长视频免费观看不卡| 3344国产精品免费看|