但是,光这样还是不行,我们发现,人物是可以移动了,但是他现在是超人,飞檐走壁无所不入,移动的畅通无阻
这就需要我们在移动过程中,加入移动判断,看看是否可以移动,
为了实现这个判断,我们必须要知道地图什么地方可以移动,什么地方不可以移动
广州网站建设,网站建设,广州网页设计,广州网站设计
所以,我们需要一个地图的地形,如下
- //地图地形数组
- var mapdata = [
- [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
- [1,1,1,0,0,0,0,0,0,0,0,0,1,1,1],
- [1,1,0,0,0,0,1,1,0,0,0,0,1,1,1],
- [1,0,0,0,1,1,1,1,1,0,0,1,1,0,1],
- [1,0,0,1,1,1,1,1,1,1,0,1,1,0,1],
- [1,0,0,1,1,1,0,1,1,1,1,1,0,0,1],
- [1,0,0,0,0,0,0,0,1,1,1,1,0,0,1],
- [1,1,0,0,0,0,0,0,0,1,1,0,0,0,1],
- [1,1,0,0,0,0,0,0,0,0,0,0,0,0,1],
- [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
- ];
地形数组中,0代表可以移动,1代表障碍物,是不可移动的,接下来,给Character类添加判断方法
- /**
- * 障碍物判断
- * @param 判断方向
- **/
- Character.prototype.checkRoad = function (dir){
- var self = this;
- var tox,toy,myCoordinate;
- //当判断方向为空的时候,默认当前方向
- if(dir==null)dir=self.direction;
- //获取人物坐标
- myCoordinate = self.getCoordinate();
- //开始计算移动目的地的坐标
- switch (dir){
- case UP:
- tox = myCoordinate.x;
- toy = myCoordinate.y - 1;
- break;
- case LEFT:
- tox = myCoordinate.x - 1;
- toy = myCoordinate.y ;
- break;
- case RIGHT:
- tox = myCoordinate.x + 1;
- toy = myCoordinate.y;
- break;
- case DOWN:
- tox = myCoordinate.x;
- toy = myCoordinate.y + 1;
- break;
- }
- //如果移动的范围超过地图的范围,则不可移动
- if(tox <= 0 || toy <= 0)return false;
- if(toy >= mapdata.length || tox >= mapdata[0].length)return false;
- //如果目的地为障碍,则不可移动
- if(mapdata[toy][tox] == 1)return false;
- return true;
- };
然后,在changeDir方法,和onmove方法中,添加相应的判断,如下
广州网站建设,网站建设,广州网页设计,广州网站设计
- /**
- * 开始移动
- **/
- Character.prototype.onmove = function (){
- var self = this;
- //设定一个移动步长中的移动次数
- var ml_cnt = 4;
- //计算一次移动的长度
- var ml = STEP/ml_cnt;
- //根据移动方向,开始移动
- switch (self.direction){
- case UP:
- self.y -= ml;
- break;
- case LEFT:
- self.x -= ml;
- break;
- case RIGHT:
- self.x += ml;
- break;
- case DOWN:
- self.y += ml;
- break;
- }
- self.moveIndex++;
- //当移动次数等于设定的次数,开始判断是否继续移动
- if(self.moveIndex >= ml_cnt){
- self.moveIndex = 0;
- //如果已经松开移动键,或者前方为障碍物,则停止移动,否则继续移动
- if(!isKeyDown || !self.checkRoad()){
- self.move = false;
- return;
- }
- }
- };
- /**
- * 改变人物方向,并判断是否可移动
- **/
- Character.prototype.changeDir = function (dir){
- var self = this;
- //如果正在移动,则无效
- if(!self.move){
- //设定人物方向
- self.direction = dir;
- //设定图片动画
- self.anime.setAction(dir);
- //判断是否可移动
- if(!self.checkRoad(dir))return;
- //如果可以移动,则开始移动
- self.move = true;
- self.moveIndex = 0;
- }
- };
好了,大功告成,开始运行吧
测试URL如下:http://fsanguo.comoj.com/html5/rpg/index.html