微信小程序之贪吃蛇游戏开发最后一天了,今天主要讲的是以下三点:
1:绘制蛇身
2:碰撞函数
3:重新开始
一:绘制蛇身
蛇的身体一开始有个默认长度,然后等吃到食物的时候就加一长度。
//身体对象(数组) var snakeBodys = [];
也是给了一个数组对象,并且逻辑是不断往数组里添加元素,但是当大于长度4的时候就停止自动添加元素
只有当吃到食物才继续变长
//蛇身体数组添加一个上一个的位置(身体对象) snakeBodys.push({ x: snakeHead.x, y: snakeHead.y, w: 20, h: 20, color: "#00ff00" });
绘制身体部分代码:
//绘制蛇身 for(var i=0;i<snakeBodys.length;i++){ var snakeBody = snakeBodys[i]; draw(snakeBody); }
再加一个判断条件用来控制初始最大身体长度
if (snakeBodys.length > 4) { //移除不用的身体位置 snakeBodys.shift(); //.shift()数组删除函数 }
二:碰撞函数
只有当蛇头碰到食物的时候才会增加蛇身长度。逻辑如下:
蛇头为一个四方边框,我们设置了蛇头的坐标和长宽,那么就可以利用四边的坐标值是否大于等于食物
所在的坐标值,以此来判断是否发生了碰撞。
那么就有这么个逻辑函数:
//蛇头与食物碰撞函数 function collide(obj1,obj2){ var l1 = obj1.x; var r1 = obj1.w + l1; var t1 = obj1.y; var b1 = obj1.h+t1; var l2 = obj2.x; var r2 = obj2.w + l2; var t2 = obj2.y; var b2 = obj2.h + t2; //这里1是蛇头方块的上下左右边框 2是食物,同样是上下左右
//(当蛇头又边框撞到食物左边框也就是大于左边框时就是碰撞了) if(r1>l2 && l1<r2 && b1 > t2 && t1< b2){ return true; }else{ return false; } }
obj1接收的是蛇头对象,obj2接收的是食物对象。
l1:蛇头左边框坐标值,r1:蛇头右边框坐标值,t1:蛇头上边框坐标值,b1:蛇头下边框坐标值
同理l2,r2,t2,b2
然后再设置一个用来确认是否增加蛇身的变量
//用于确定是否删除
var collideBol = true; 一开始默认是直接调用.shift()方法的
当碰撞到食物后
if (snakeBodys.length > 4) { //移除不用的身体位置 if (collideBol){ snakeBodys.shift(); }else{ collideBol = true; } }
对于碰撞后食物的重新绘制,代码如下:
在Food()对象创建方法里加一个内部方法:
this.reset = function (){ this.x = rand(0,windowWidth); this.y = rand(0,windowHeight); this.color = "rgb(" + rand(0, 255) + "," + rand(0, 255) + "," + rand(0, 255) + ")"; }
在绘制食物的同时加上是否碰撞的逻辑判断
//绘制食物 for(var i=0;i<foods.length;i++){ var foodObj = foods[i]; draw(foodObj); if (collide(snakeHead,foodObj)){ //console.log("撞上了"); collideBol = false; foodObj.reset();//撞到后食物对象重绘,内部方法reset() } }
三:蛇头与墙壁碰撞函数(重新开始)
//蛇头与墙壁碰撞函数 function collide2(obj1){ var l1 = obj1.x; var r1 = obj1.w + l1; var t1 = obj1.y; var b1 = obj1.h + t1; if (l1 <=snakeHead.w || r1 >=windowWidth || t1 <=snakeHead.h || b1 >= windowHeight){ return true; }else{ return false; } }
对于这里的windowWidth等屏幕长宽,我设置了全局变量来获取
//窗口的宽高 var windowWidth = 0; var windowHeight = 0; //用来获取屏幕大小 wx.getSystemInfo({ success: function (res) { windowWidth = res.windowWidth; windowHeight = res.windowHeight; } });
好了这就是微信小程序之贪吃蛇小游戏开发代码解析所有内容了。后一文将会贴出完整的代码
浙公网安备 33010602011771号