打小蜜蜂游戏
采用单体模式,单体就是把一批相关的属性和方法组织在一起的对象。
特点:
- 可以以用来划分命名空间,清除全局变量带来的危险。
- 可以把代码组织的更为一体,便于阅读和维护。
需要注意的点:
1、由于采用单体模式,每个方法的对象都是私有的,别的方法想调用的时候需要将其变为此对象里的全局对象
this.oUl = oUl;
2、this在碰到事件的时候this就不在指向该对象,需要更改this指向
var This=this;
游戏中几个点的解决办法
1、小蜜蜂的布局
不能采用float方式,因为当小蜜蜂移动或者消失的时候,剩下的布局方式会乱掉,所以采用绝对定位的布局,但是一开始不知该如何设置每个小蜜蜂的定位,可以先采用float方式,然后设置一个数组存下当前的left和top值,然后在设置成定位的方式。
var arr=[];
for (var i = 0; i < this.aLi.length; i++) {
arr.push([this.aLi[i].offsetLeft, this.aLi[i].offsetTop]);
}
for (var i = 0; i < this.aLi.length; i++) {
$(this.aLi[i]).css({
'position': 'absolute',
'left': arr[i][0],
'top': arr[i][1],
});
}
2、单兵作战时x和y的速度
可以根据offsetleft和offsettop算出a和b,勾股定理算出c,给出斜边移动速度10就可以算出小蜜蜂的速度x和y。
var This=this;
var nowLi=this.aLi[Math.floor(Math.random()*This.aLi.length)];//随机生成一个li
setInterval(function(){
var a=This.oA.offset().left-$(nowLi).offset().left;
var b=This.oA.offset().top-$(nowLi).offset().top;
var c=Math.sqrt(a*a+b*b);
var iSX=$(nowLi).data('speed') *a/c;
var iSY=$(nowLi).data('speed') *b/c;
//console.log(gk.eMap[rand].speed);
$(nowLi).css({
'left':$(nowLi).offset().left+iSX+'px',
'top':$(nowLi).offset().top+iSY+'px',
});
},30);
3、 碰撞检测:
子弹打小蜜蜂时主要是做碰撞检测,碰撞检测的思路是两个物体的前后左右都检测,比较L1,R1,T1,B1,L2,R2,T2,B2,
pz: function(obj1, obj2) { //碰撞检测
var L1 = obj1.offset().left;
var R1 = obj1.offset().left + obj1.width();
var T1 = obj1.offset().top;
var B1 = obj1.offset().top + obj1.height();
var L2 = obj2.offset().left;
var R2 = obj2.offset().left + obj2.width();
var T2 = obj2.offset().top;
var B2 = obj2.offset().top + obj2.height();
if (R1 < L2 || L1 > R2 || B1 < T2 || T1 > B2) { //未碰着
return false;
} else {
return true;
}
}