html5中文学习网

您的位置: 首页 > 网站及特效实例 > javascript特效 » 正文

javascript制作坦克大战全纪录(2)_javascript技巧_

[ ] 已经帮助:人解决问题

2.   完善地图KiZHTML5中文学习网 - HTML5先行者学习网
KiZHTML5中文学习网 - HTML5先行者学习网

    我们的地图中有空地,墙,钢,草丛,水,总部等障碍物。 我们可以把这些全部设计为对象。KiZHTML5中文学习网 - HTML5先行者学习网
KiZHTML5中文学习网 - HTML5先行者学习网

2.1  创建障碍物对象群KiZHTML5中文学习网 - HTML5先行者学习网

    对象群保存各种地图上的对象,我们通过对象的属性来判断对象是否可以被穿过或被攻击。KiZHTML5中文学习网 - HTML5先行者学习网
 KiZHTML5中文学习网 - HTML5先行者学习网
Barrier.js:KiZHTML5中文学习网 - HTML5先行者学习网
 KiZHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
KiZHTML5中文学习网 - HTML5先行者学习网
 // 障碍物基类对象,继承自TankObjectKiZHTML5中文学习网 - HTML5先行者学习网
 Barrier = function () {KiZHTML5中文学习网 - HTML5先行者学习网
     this.DefenVal = 1;  // 防御力KiZHTML5中文学习网 - HTML5先行者学习网
     this.CanBeAttacked = true;  // 是否可以被攻击KiZHTML5中文学习网 - HTML5先行者学习网
 }KiZHTML5中文学习网 - HTML5先行者学习网
 Barrier.prototype = new TankObject();KiZHTML5中文学习网 - HTML5先行者学习网
 // 墙KiZHTML5中文学习网 - HTML5先行者学习网
 WallB = function () { }KiZHTML5中文学习网 - HTML5先行者学习网
 WallB.prototype = new Barrier();KiZHTML5中文学习网 - HTML5先行者学习网
 // 空地KiZHTML5中文学习网 - HTML5先行者学习网
 EmptyB = function () {KiZHTML5中文学习网 - HTML5先行者学习网
     this.CanAcross = true;  // 可被穿过KiZHTML5中文学习网 - HTML5先行者学习网
 }KiZHTML5中文学习网 - HTML5先行者学习网
 EmptyB.prototype = new Barrier();KiZHTML5中文学习网 - HTML5先行者学习网
 // 河流KiZHTML5中文学习网 - HTML5先行者学习网
 RiverB = function () {KiZHTML5中文学习网 - HTML5先行者学习网
     this.DefenVal = 0;KiZHTML5中文学习网 - HTML5先行者学习网
     this.CanBeAttacked = false; // 优先取对象的成员,继承自父类的会被覆盖。KiZHTML5中文学习网 - HTML5先行者学习网
 }KiZHTML5中文学习网 - HTML5先行者学习网
 RiverB.prototype = new Barrier();KiZHTML5中文学习网 - HTML5先行者学习网
 // 钢KiZHTML5中文学习网 - HTML5先行者学习网
 SteelB = function () {KiZHTML5中文学习网 - HTML5先行者学习网
     this.DefenVal = 3;KiZHTML5中文学习网 - HTML5先行者学习网
 }KiZHTML5中文学习网 - HTML5先行者学习网
 SteelB.prototype = new Barrier();KiZHTML5中文学习网 - HTML5先行者学习网
 // 草丛对象KiZHTML5中文学习网 - HTML5先行者学习网
 TodB = function () {KiZHTML5中文学习网 - HTML5先行者学习网
     this.CanBeAttacked = false;KiZHTML5中文学习网 - HTML5先行者学习网
     this.DefenVal = 0;KiZHTML5中文学习网 - HTML5先行者学习网
     this.CanAcross = true;KiZHTML5中文学习网 - HTML5先行者学习网
 }KiZHTML5中文学习网 - HTML5先行者学习网
 TodB.prototype = new Barrier();KiZHTML5中文学习网 - HTML5先行者学习网
 // 总部KiZHTML5中文学习网 - HTML5先行者学习网
 PodiumB = function () {KiZHTML5中文学习网 - HTML5先行者学习网
     this.DefenVal = 5;KiZHTML5中文学习网 - HTML5先行者学习网
 }KiZHTML5中文学习网 - HTML5先行者学习网
 PodiumB.prototype = new Barrier();KiZHTML5中文学习网 - HTML5先行者学习网
KiZHTML5中文学习网 - HTML5先行者学习网
KiZHTML5中文学习网 - HTML5先行者学习网

2.2    写入地图的数据。KiZHTML5中文学习网 - HTML5先行者学习网

在Common.js 中添加以下代码:KiZHTML5中文学习网 - HTML5先行者学习网
 KiZHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
KiZHTML5中文学习网 - HTML5先行者学习网
 //地图元素类型枚举KiZHTML5中文学习网 - HTML5先行者学习网
 /*KiZHTML5中文学习网 - HTML5先行者学习网
 0:空地    KiZHTML5中文学习网 - HTML5先行者学习网
 1:墙    KiZHTML5中文学习网 - HTML5先行者学习网
 2:钢    KiZHTML5中文学习网 - HTML5先行者学习网
 3:树丛        KiZHTML5中文学习网 - HTML5先行者学习网
 4:河        KiZHTML5中文学习网 - HTML5先行者学习网
 5:总部    KiZHTML5中文学习网 - HTML5先行者学习网
 */KiZHTML5中文学习网 - HTML5先行者学习网
 var EnumMapCellType = {KiZHTML5中文学习网 - HTML5先行者学习网
     Empty: "0"KiZHTML5中文学习网 - HTML5先行者学习网
     , Wall: "1"KiZHTML5中文学习网 - HTML5先行者学习网
     , Steel: "2"KiZHTML5中文学习网 - HTML5先行者学习网
     , Tod: "3"KiZHTML5中文学习网 - HTML5先行者学习网
     , River: "4"KiZHTML5中文学习网 - HTML5先行者学习网
     , Podium: "5"KiZHTML5中文学习网 - HTML5先行者学习网
 };KiZHTML5中文学习网 - HTML5先行者学习网
 // 每个地形对应的样式名称KiZHTML5中文学习网 - HTML5先行者学习网
 var ArrayCss = ['empty', 'wall', 'steel', 'tod', 'river', 'podium'];KiZHTML5中文学习网 - HTML5先行者学习网
 // 关卡地图KiZHTML5中文学习网 - HTML5先行者学习网
 /*关卡*/KiZHTML5中文学习网 - HTML5先行者学习网
 var str = '0000000000000';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',0011100111010';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',1000010000200';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',1200333310101';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',0000444400001';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',3313300001011';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',3011331022011';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',3311031011011';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',0101011102010';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',0101011010010';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',0100000000110';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',0100012101101';KiZHTML5中文学习网 - HTML5先行者学习网
 str += ',0010015100000';KiZHTML5中文学习网 - HTML5先行者学习网
 // 存储关卡地图   0,1,2,3... 分别为1-n ... 关KiZHTML5中文学习网 - HTML5先行者学习网
 var Top_MapLevel = [str];KiZHTML5中文学习网 - HTML5先行者学习网
KiZHTML5中文学习网 - HTML5先行者学习网
KiZHTML5中文学习网 - HTML5先行者学习网

2.3    绘制地图KiZHTML5中文学习网 - HTML5先行者学习网

    准备工作做完了,下面开始上大菜,绘制地图。前面有提到我们的地图为 13 * 13 的表格。所以我们在游戏装载对象添加行和列两个属性,并且添加初始化地图方法。KiZHTML5中文学习网 - HTML5先行者学习网
 KiZHTML5中文学习网 - HTML5先行者学习网
Frame.js:KiZHTML5中文学习网 - HTML5先行者学习网
 KiZHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
KiZHTML5中文学习网 - HTML5先行者学习网
 // 游戏载入对象 整个游戏的核心对象KiZHTML5中文学习网 - HTML5先行者学习网
 GameLoader = function () {KiZHTML5中文学习网 - HTML5先行者学习网
     this._mapContainer = document.getElementById("divMap");  // 存放游戏地图的divKiZHTML5中文学习网 - HTML5先行者学习网
     this._selfTank = null;  // 玩家坦克KiZHTML5中文学习网 - HTML5先行者学习网
     this._gameListener = null; // 游戏主循环计时器idKiZHTML5中文学习网 - HTML5先行者学习网
     /*v2.0新加的属性*/KiZHTML5中文学习网 - HTML5先行者学习网
     this._level = 1;KiZHTML5中文学习网 - HTML5先行者学习网
     this._rowCount = 13;KiZHTML5中文学习网 - HTML5先行者学习网
     this._colCount = 13;KiZHTML5中文学习网 - HTML5先行者学习网
     this._battleField = []; // 存储地图对象二维数组KiZHTML5中文学习网 - HTML5先行者学习网
 }KiZHTML5中文学习网 - HTML5先行者学习网
 // 加载地图方法KiZHTML5中文学习网 - HTML5先行者学习网
    Load: function () {KiZHTML5中文学习网 - HTML5先行者学习网
         // 根据等级初始化地图KiZHTML5中文学习网 - HTML5先行者学习网
         var map = Top_MapLevel[this._level - 1].split(",");KiZHTML5中文学习网 - HTML5先行者学习网
         var mapBorder = UtilityClass.CreateE("div", "", "mapBorder", this._mapContainer);KiZHTML5中文学习网 - HTML5先行者学习网
         // 遍历地图表格中每一个单元格KiZHTML5中文学习网 - HTML5先行者学习网
         for (var i = 0; i < this._rowCount; i++) {KiZHTML5中文学习网 - HTML5先行者学习网
             // 创建div,每一行的地图保存在这个div中KiZHTML5中文学习网 - HTML5先行者学习网
             var divRow = UtilityClass.CreateE("div", "", "", mapBorder);KiZHTML5中文学习网 - HTML5先行者学习网
             // 在一维数组中再创建一个数组KiZHTML5中文学习网 - HTML5先行者学习网
             this._battleField[i] = [];KiZHTML5中文学习网 - HTML5先行者学习网
             for (var j = 0; j < this._colCount; j++) {KiZHTML5中文学习网 - HTML5先行者学习网
                 // 读取地图数据,默认值:0KiZHTML5中文学习网 - HTML5先行者学习网
                 var v = (map[i] && map[i].charAt(j)) || 0;KiZHTML5中文学习网 - HTML5先行者学习网
                 // 插入span元素,一个span元素即为一个地图单位KiZHTML5中文学习网 - HTML5先行者学习网
                 var spanCol = UtilityClass.CreateE("span", "", "", divRow);KiZHTML5中文学习网 - HTML5先行者学习网
                 spanCol.className = ArrayCss[v];KiZHTML5中文学习网 - HTML5先行者学习网
                 // 将地图对象放入二维数组中,便于后面碰撞检测。KiZHTML5中文学习网 - HTML5先行者学习网
                 var to = null;KiZHTML5中文学习网 - HTML5先行者学习网
                 switch (v) {KiZHTML5中文学习网 - HTML5先行者学习网
                     case EnumMapCellType.Empty:KiZHTML5中文学习网 - HTML5先行者学习网
                         to = new EmptyB();KiZHTML5中文学习网 - HTML5先行者学习网
                         break;KiZHTML5中文学习网 - HTML5先行者学习网
                     case EnumMapCellType.Wall:KiZHTML5中文学习网 - HTML5先行者学习网
                         to = new WallB();KiZHTML5中文学习网 - HTML5先行者学习网
                         break;KiZHTML5中文学习网 - HTML5先行者学习网
                     case EnumMapCellType.Steel:KiZHTML5中文学习网 - HTML5先行者学习网
                         to = new SteelB();KiZHTML5中文学习网 - HTML5先行者学习网
                         break;KiZHTML5中文学习网 - HTML5先行者学习网
                     case EnumMapCellType.Tod:KiZHTML5中文学习网 - HTML5先行者学习网
                         to = new TodB();KiZHTML5中文学习网 - HTML5先行者学习网
                         break;KiZHTML5中文学习网 - HTML5先行者学习网
                     case EnumMapCellType.River:KiZHTML5中文学习网 - HTML5先行者学习网
                         to = new RiverB();KiZHTML5中文学习网 - HTML5先行者学习网
                         break;KiZHTML5中文学习网 - HTML5先行者学习网
                     case EnumMapCellType.Podium:KiZHTML5中文学习网 - HTML5先行者学习网
                         to = new PodiumB();KiZHTML5中文学习网 - HTML5先行者学习网
                         break;KiZHTML5中文学习网 - HTML5先行者学习网
                     default:KiZHTML5中文学习网 - HTML5先行者学习网
                         throw new Error("地图数字越界!");KiZHTML5中文学习网 - HTML5先行者学习网
                         break;KiZHTML5中文学习网 - HTML5先行者学习网
                 }KiZHTML5中文学习网 - HTML5先行者学习网
                 to.UI = spanCol;KiZHTML5中文学习网 - HTML5先行者学习网
                 //这里的j就是X,因为内部循环是横向的,x是横坐标KiZHTML5中文学习网 - HTML5先行者学习网
                 to.XPosition = j;KiZHTML5中文学习网 - HTML5先行者学习网
                 to.YPosition = i;KiZHTML5中文学习网 - HTML5先行者学习网
                 // 将当前的地图对象存入二维数组中obj为障碍物对象,occupier为占有对象KiZHTML5中文学习网 - HTML5先行者学习网
                 this._battleField[i][j] = { obj: to, occupier: null, lock: false };KiZHTML5中文学习网 - HTML5先行者学习网
             }   //end forKiZHTML5中文学习网 - HTML5先行者学习网
         }   // end forKiZHTML5中文学习网 - HTML5先行者学习网
         // 放入window全局变量KiZHTML5中文学习网 - HTML5先行者学习网
         window.BattleField = this._battleField;KiZHTML5中文学习网 - HTML5先行者学习网
     }KiZHTML5中文学习网 - HTML5先行者学习网
KiZHTML5中文学习网 - HTML5先行者学习网

    ok,到这里我们的地图就大功告成了。 这里的注释已经很详细了,如果大家还有不理解的地方自己下载源码调试一下就很好理解了。KiZHTML5中文学习网 - HTML5先行者学习网
KiZHTML5中文学习网 - HTML5先行者学习网

这里主要加载地图数据,将每一个地图作为span元素插入html文档中。并且将地图的对象存储在二维数组中。以后我们做碰撞检测的时候就可以直接通过对象的坐标取到对应的数组对象,十分方便。KiZHTML5中文学习网 - HTML5先行者学习网

附上源码:http://xiazai.jb51.net/201411/yuanma/jstankedazhan(jb51.net).rarKiZHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助