小游戏-打小蜜蜂

打小蜜蜂游戏

采用单体模式,单体就是把一批相关的属性和方法组织在一起的对象。
特点:

  • 可以以用来划分命名空间,清除全局变量带来的危险。
  • 可以把代码组织的更为一体,便于阅读和维护。

需要注意的点:

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。

image.png
 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,

image.png
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;

            }
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,796评论 1 92
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,118评论 25 708
  • 经过一个周的学习,真的收获超级超级多,对工作和生活也有了更好的规划和安排,最直观的感受就是时间“多了”。具体有哪些呢?
    小恩叨逼叨阅读 293评论 1 4
  • 玻璃心这个东西迟早都是要砸碎的。把滚烫的期望冷却掉,做一名合格的,不卑不亢的大人。只有这样才能跟世界周旋,从整个城...
    Alice王志荣阅读 185评论 0 0