最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript制作坦克大戰(zhàn)全紀(jì)錄(2)

 更新時間:2014年11月27日 10:22:20   投稿:hebedich  
上文我們簡單的完成了坦克大戰(zhàn)的雛形,本文我們來繼續(xù)完善坦克大戰(zhàn),接下來我們來學(xué)習(xí)制作地圖和碰撞檢測方面的問題。

2.   完善地圖

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

2.1  創(chuàng)建障礙物對象群

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

復(fù)制代碼 代碼如下:

 // 障礙物基類對象,繼承自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; // 優(yōu)先取對象的成員,繼承自父類的會被覆蓋。
 }
 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    寫入地圖的數(shù)據(jù)。

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

復(fù)制代碼 代碼如下:

 //地圖元素類型枚舉
 /*
 0:空地   
 1:墻   
 2:鋼   
 3:樹叢       
 4:河       
 5:總部   
 */
 var EnumMapCellType = {
     Empty: "0"
     , Wall: "1"
     , Steel: "2"
     , Tod: "3"
     , River: "4"
     , Podium: "5"
 };
 // 每個地形對應(yīng)的樣式名稱
 var ArrayCss = ['empty', 'wall', 'steel', 'tod', 'river', 'podium'];
 // 關(guān)卡地圖
 /*關(guān)卡*/
 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';
 // 存儲關(guān)卡地圖   0,1,2,3... 分別為1-n ... 關(guān)
 var Top_MapLevel = [str];

2.3    繪制地圖

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

復(fù)制代碼 代碼如下:

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

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

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

附上源碼:http://xiazai.jb51.net/201411/yuanma/jstankedazhan(jb51.net).rar

相關(guān)文章

  • JS getStyle獲取最終樣式函數(shù)代碼

    JS getStyle獲取最終樣式函數(shù)代碼

    定義一個id="flower"的div元素 并設(shè)置如上樣式,我們的目標(biāo)就是通過javascript來獲取樣式的最終屬性
    2010-04-04
  • javascript 折半查找字符在數(shù)組中的位置(有序列表)

    javascript 折半查找字符在數(shù)組中的位置(有序列表)

    折半查找字符在數(shù)組中的位置(有序列表),需要的朋友可以參考下。
    2010-12-12
  • JavaScipt選取文檔元素的方法(推薦)

    JavaScipt選取文檔元素的方法(推薦)

    下面小編就為大家?guī)硪黄狫avaScipt選取文檔元素的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • layui的表單驗證支持ajax判斷用戶名是否重復(fù)的實例

    layui的表單驗證支持ajax判斷用戶名是否重復(fù)的實例

    今天小編就為大家分享一篇layui的表單驗證支持ajax判斷用戶名是否重復(fù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript原型與原型鏈深入探究使用方法

    JavaScript原型與原型鏈深入探究使用方法

    js中的原型與原型鏈應(yīng)該是老生常談的話題了,在前端面試中基本都是必問的一個問題,但是很多人還是稀里糊涂的,只知道其表層含義。本文將帶大家深入了解JavaScript中的原型與原型鏈,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • JavaScript toDataURL圖片轉(zhuǎn)換問題解讀

    JavaScript toDataURL圖片轉(zhuǎn)換問題解讀

    這篇文章主要介紹了JavaScript toDataURL圖片轉(zhuǎn)換問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 利用transition實現(xiàn)文字上下抖動的效果

    利用transition實現(xiàn)文字上下抖動的效果

    這篇文章主要給大家介紹了利用transition屬性如何實現(xiàn)文字上下抖動的效果,文中給出了詳細(xì)的介紹和完整的實例代碼,相信對大家的學(xué)習(xí)具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2017-01-01
  • javascript解決IE6下hover問題的方法

    javascript解決IE6下hover問題的方法

    本文分享了一個小技巧:javascript解決IE6下hover問題的方法,方法很實用,需要了解的朋友可以參考下
    2015-07-07
  • 深入理解javascript原型鏈和繼承

    深入理解javascript原型鏈和繼承

    這篇文章主要介紹了javascript原型鏈和繼承的概念,以及使用原型鏈實現(xiàn)繼承、經(jīng)典繼承、組合式繼承、寄生組合式繼承。非常實用,是篇非常不錯的文章,這里推薦給大家。
    2014-09-09
  • 通過網(wǎng)頁查看JS源碼中漢字顯示亂碼的解決方法

    通過網(wǎng)頁查看JS源碼中漢字顯示亂碼的解決方法

    這篇文章給大家主要介紹了通過網(wǎng)頁查看JS源碼的時候,發(fā)現(xiàn)漢字顯示是亂碼的解決方法,文中通過圖文詳解的介紹了解決的步驟,詳細(xì)會對大家很有幫助,有需要的朋友們下面來一起看看吧。
    2016-10-10

最新評論

育儿| 凤山市| 隆化县| 罗江县| 昭觉县| 金华市| 凌源市| 石嘴山市| 凌源市| 永胜县| 马鞍山市| 巴东县| 卢湾区| 博乐市| 祁门县| 江源县| 武定县| 化州市| 密山市| 永城市| 富蕴县| 阿瓦提县| 陵川县| 荆门市| 青冈县| 海城市| 张家港市| 尤溪县| 宜昌市| 塔城市| 什邡市| 汝阳县| 黄石市| 宝清县| 甘孜县| 宣恩县| 喀喇沁旗| 泗洪县| 浦县| 通江县| 富川|