用javascript 面向对象制作坦克大战(三)

 

  之前,我们完成了坦克的移动和地图的绘制,这次我们来完成碰撞检测和炮弹的发射。

 

  上代码前来张最新的类图:

 

3. 碰撞检测

    前面我们已经完成了坦克的移动和地图的绘制,下面我们开始写碰撞检测。

3.1    创建碰撞检测对象

        我们创建一个对象来做碰撞检测,由于碰撞检测都是在对象移动的时候进行的所以我们让Mover继承我们的碰撞对象。
HitTestObject.js:
 
 View Code

 

  这里我们把之前写的地图二维数组对象充分利用上了。通过对象x,y坐标取对应的地图对象,再根据属性判断是否可被穿过,是否已被占用。

3.2   调用碰撞检测

  这里需要我们在之前的代码做一系列的更改了。

 更改 Mover.js

  1、继承碰撞检测对象
1 Mover.prototype = new HitTestObject();

  

  2、在Mover方法中调用碰撞检测
1
2
// 碰撞检测
    if (this.HitTest(battleField)) { return this.OnHitTest(battleField); }

  

  3、移动完成后占用新地图对象,清空原对象地图占用。
1
2
3
4
battleField[nextPoint.y][nextPoint.x].occupier = This;  /*占用新位置*/
// 清空对象原来位置占有
battleField[yp][xp].occupier = null;

  

还有一些更改就不一一列出了,大家可以下载源码查看。
更改    Frame.js 给方法加上参数。
更改 tank.js  UpdateUi方法
初始化坦克时,占有当前位置。

4.   发射炮弹

     炮弹可以移动,所以继承自我们的Mover对象。炮弹击中障碍物时会有爆炸效果,所以我们先写爆炸对象。

 

4.1 爆炸效果对象

  Explode.js:

 

 

 View Code

 

 

 


4.2 炮弹对象

   Bomb.js:
 View Code

 

   主要的对象完成了,调用就是水到渠成了,我们需要给坦克添加一个发射炮弹的方法,并在玩家按下空格键时调用就可以了。  大家可以试着自己写下实现。  
posted @ 2017-06-01 12:10  杨铭宇  阅读(284)  评论(0编辑  收藏  举报
友情链接:回力球鞋 | 中老年女装 | 武汉英语学校 | 雅思备考 | 托福备考