中秋节马上就要来临,公司开发了一个h5小游戏叉月饼,其实就是游戏“见缝插针”的翻版。这个游戏的开发任务落到了我的头上。。。

一 游戏介绍

游戏场景基本如下所示:

       

二 所用工具

这次的开发还是用的公司原有的一些框架,其中包括处理图片预加载、处理音效的等,其中包含了creatJS的一些内容,暂时还没有研究。有时间要研究一下。

所用框架如下:

   <script type="text/javascript" src="../Public/js/setviewport.js"></script><script type="text/javascript" src="../Public/js/jweixin-1.0.0.js"></script><script type="text/javascript" src="../Public/js/WeixinApi.js"></script><script type="text/javascript" src="../Public/js/jquery-2.1.1.min.js"></script><script type="text/javascript" src="../Public/js/hammer.min.js"></script><script type="text/javascript" src="../Public/js/TweenMax.min.js"></script><script type="text/javascript" src="../Public/js/preloadjs-0.6.0.min.js"></script><script src="http://cdn.gbtags.com/EaselJS/0.7.1/easeljs.min.js"></script><script src="http://cdn.gbtags.com/PreloadJS/0.4.1/preloadjs.min.js"></script><script src="http://cdn.gbtags.com/SoundJS/0.5.2/soundjs.min.js"></script><script type="text/javascript" src="../Public/js/main.js"></script><script type="text/javascript" src="../Public/js/wScratchPad.min.js"></script>

其实主要用的是JQuery、TweenMAx、preload等。

三 页面布局

游戏的主要画面包括游戏初始页、规则、游戏、过关提示、抽奖、抽奖结果并提交信息、通关提交信息等。因为PSD图中游戏结束提示灯一些页面都是在初始页的基础上加了个半透明的遮罩,所以这些提示都写在了初始页里面,游戏画面是一个单独的快,抽奖是一个单纯的块,抽奖结果是一个单独的块,抽奖结束是一个单独的块,过关提示是一个单独的块。

四 游戏逻辑

首先第一个页面点击按钮查看游戏规则,游戏规则也点击开始游戏开始游戏,简单的点击事件暂且不提。

我们需要初始化一些全局变量用于游戏控制。

    var tar = $(".point");        //旋转月饼1var tar2 = $(".point2");     //旋转月饼2var arrowIndex = 1;          //针数var rotateNum = 0;           //旋转度数var arrPos = [360];          //已有度数列表var safeDistance = 8;        //安全距离var score = 0;               //得分var level=1;                 //关数var levelmap=[0,2,4,6,8,9,10,11,12,13,14]         //难度地图,设置初始针数

如图所示,月饼是旋转的,而在这里我们有两个旋转的月饼。原因是point这个月饼是一个空的div,而月饼图片是他的背景,而当我们把针射上去的时候,采用的方式是在point这个空div里面添加子元素,子元素就是针,而针子元素是相对于point定位的,结果就是针在月饼的上面,这样当然不好看,所以我在point后面加上了一个月饼point2,用它把第一个月饼盖住,两个月饼一起转动,这样针就乖乖的插在了月饼里面。

arrowIndex是表示插得针数,rotateNum是月饼旋转的角度,arrPos是月饼上已经有的针的角度,用于判断插针结果,safeDistance是安全距离,当两根针之间的角度差小于它是,游戏失败,score是得分,level是关数,levelmap是难度地图,用于初始化每关游戏开始时自带针数。

1、倒计时

点击开始游戏按钮时,游戏场景出现,开始倒计时3秒。倒计时的实现是采用setInterval每隔1000ms换一张图片。

    function numCount(){var flag=3;var timer2=setInterval(function(){if(flag>1){flag--;$('.count img').attr('src','../Public/images/a'+flag+'.png')}else{clearInterval(timer2);can=true;gameStart();}},1000)}

其中can为点击事件的开关,初始为flase;当can为true时,方可点击。

2、难度设置

游戏刚开始时设置难度,同时每过一关都要重新设置难度,所以需要在这个函数中将arrowIndex重置为1,将arrPos重置为[360],之所以初始为360不为空,是因为0度肯定是存在的,而360等于0度,在计算是否插针成功的时候,没有360将会产生一些错误。

首先获得当前难度,然后根据当前难度在levelmap里面取数,取出的数字即为下一关初始针数,然后用360/针数取整,针旋转相应度数,将这些针循环写入point,同时将这些度数push进数组arrPos,表示已经存在上述度数的针。初始化页面下方球数,在调用这个函数的时候,需要传入一个参数,即每关有多少根针,然后将通过循环将底部小球写入相应div,并附上数字。

3、游戏开始

月饼旋转使用的是setInterval来控制,每隔相应时间月饼转动一度,同时全局变量rotateNum加1,当大于等于360的时候归0,这样月饼的角度一直在0到360之间变化。当发生点击事件的时候,可以通过rotateNum的值获取到当前月饼旋转的角度,然后在point中添加一个元素(针),并使它旋转到一定的角度。由于针是相对于月饼定位的,其top和left都为50%,通过调节margin使他出现在月饼正下方,所以如果月饼不转的话,新添加的针出现在月饼的正下方,此时月饼和针的旋转角度均为0,而当月饼旋转X度之后,针如果不旋转,也将出现在X度的方向,所以针需要旋转Y=360-X度,即让针从0度位置,先跟着月饼旋转到X,在旋转到Y,所以针相对于手机旋转360度等于不旋转,针将出现在月饼的最下方。然后将针旋转的度数Y push进数组arrPos。定义一个新数组,然后使用grep方式用Y减去数组arrPos的每一项,当结果小于安全距离safeDistance的时候,将arrPos的这一项写入新数组,如果新数组的长度大于等于2,说明存在两根针之间的距离小于安全距离,游戏结束。当这次插针成功时,将度数写入数组arrPos,将下方球第一个元素remove,同时分数加1,当分数大于等于10时,过关提示页出现,关数加1,同时初始化难度。当关数大于等于10时,通全关,游戏界面隐藏,清空计时器,出现奖励界面。若游戏失败且过关数大于等于3,游戏界面隐藏,清空计时器,出现抽奖页面。

4、抽奖

点击抽奖按钮,调ajax获取抽奖,若用户没有抽奖资格,转盘转动几圈,然后停在谢谢参与地方,弹窗提示用户,然后刷新页面。

若用户有抽奖资格且中奖,转盘转动,最后根据奖品ID停在相应位置,然后跳出获奖信息,并让用户填写信息。用户信息填写成功并提交后,跳到最后宣传页面。

若用户没有中奖,,转盘转动,最后停在谢谢参与位置,跳出没中奖,用户点击再次挑战重新开始游戏。

5、再次挑战,重新开始游戏

初始化各种全局变量,将页面该隐藏的隐藏,改显示的显示,然后重新调用倒计时函数。

五 遇到的各种BUG

1、iOS端点击延迟、闪屏:

  愚蠢的我点击事件随便写了个click,当然是不可以啦,毕竟300ms延迟伤不起呀,怪我怪我~~~

  我们是用这种方法封装的点击事件

  

    var mobile   = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent);var touchstart = mobile ? "touchstart" : "mousedown";var touchend = mobile ? "touchend" : "mouseup";var touchmove = mobile ? "touchmove" : "mousemove";

2、IOS端连续点击屏幕上移

  这个问题很严重,快速双击是经常存在的,解决办法如下代码:

    function initPreventPageDobuleTap(isPreventPageDobuleTap){if(isPreventPageDobuleTap){$('.main').on(touchstart,function(e){e.preventDefault()})}else{$('.main').off(touchstart);$('.main').off(touchend);}}

  意思就是当传入false的时候,把touch事件给解绑,传入true的时候,取消事件的默认动作。但是当有表单页的时候,要关闭阻止事件,否则不能输入文字了,请传入false值,再次运行即可。

  即要阻止双击,就传true,取消事件的默认动作,但这样会阻止表单,因为触摸不会触发input,所以要关闭它。

转载于:https://www.cnblogs.com/abuc/p/5853426.html

H5游戏见缝插针开发相关推荐

  1. H5游戏定制开发要点全解析

    今天小编分享的绝对是实打实的干货教材,想了解完整H5游戏营销制作流程的商家们一定要仔细查阅,保证你摆脱入门级水平,让你的H5互动营销开发更加得心应手! 任何一个优质的产品都离不开明确制作流程.挑选团队 ...

  2. 一个H5游戏的开发(二)

    websocket数据序列化 数据通信时需要协商好一种数据格式方便前后端读取和发送,这里我认为2种选择就够了.如果公司或个人开发没有相关的自定义数据结构之类工具积累,那么直接选择Protocol Bu ...

  3. 儿童游戏html5,节日H5丨提前了解下,比小猪佩奇更社会的儿童节H5游戏

    原标题:节日H5丨提前了解下,比小猪佩奇更社会的儿童节H5游戏 掐指一算熊孩子的节日快到了 当下二胎市场的经济实力不容小觑 相信各位品牌主大大们已经开始有计划做 儿童节品牌营销方案了 下面推荐 9个儿 ...

  4. 【10086个赞】Cocos Creator助力H5游戏大爆发

    梦想起航,共筑辉煌.4月21日,"资本助推H5行业发展--2017·H5-GAME资深大咖荟"在厦门创+会议中心正式拉开帷幕. 作为一个新兴行业,H5游戏至去年年末便被众多从业者炒 ...

  5. H5游戏定制,4大优势助力企业曝光10W+

    H5游戏定制,4大优势助力企业曝光10W+ 移动互联网已成为了人们生活的一部分,普通广告形式已很难吸引用户的眼球,企业要怎样才能将广告更广泛的传播给更多用户呢?根据TOM游戏多年从业经验,为大家分享以 ...

  6. createjs开发h5游戏: 指尖大冒险

    之前看到一个指尖冒险游戏,觉得挺有意思,就想学习一下怎么实现,毕竟当产经提出类似的需求时,问我等开发可不可以实现的时候,不至于回答不知道. 本文的主要思路,参考的是凹凸实验室的这篇文章:H5游戏开发: ...

  7. H5游戏开发包括哪些游戏类型

    H5在微信还没有诞生的时候,就已经在各大手机应用方面展露头角.最早的H5小游戏,例如4399公司开发的,开始了新一轮的热潮.随着微信的推出,很多H5游戏开始嵌入到微信公众号.微信群.朋友圈. H5因其 ...

  8. h5互动小游戏定制开发流程

    目前已经有大批品牌商家使用H5游戏定制作为营销活动的手段,但是有些企业或商家往往会忽视开发过程中的一些细节,为了避免大家少走弯路,下面TOM游戏小编就为大家列举下在定制开发H5游戏阶段需要注意哪些方面 ...

  9. 使用Phaser开发你的第一个H5游戏(一)

    本文来自网易云社区 作者:王鸽 不知你是否还记得当年风靡一时的2048这个游戏,一个简单而又不简单的游戏,总会让你在空闲时间玩上一会儿. 在这篇文章里,我们将使用开源的H5框架--Phaser来重现这 ...

最新文章

  1. !!!. 数据库的编程(ADO) --- 三种sql语句执行的不同
  2. xtrabackup mysql 5.6_MySQL 5.6对于Xtrabackup的影响
  3. 在vue-cli项目中使用微信sdk的解决方案
  4. centos7 卸载安装失败的mysql7
  5. 技术分享连载(八十六)
  6. ubuntu设置成中文详细贴图教程
  7. CKEditor5系列三:创建一个功能相对完善的插件
  8. python3 练习题 day02
  9. 手写识别ocr java,OCR 指的是手写文字技术_学小易找答案
  10. C语言求一个整数各个位数之和
  11. GitHub学习总结
  12. 如何玩转物联网开发板
  13. http header
  14. BUUCTF [GYCTF2020] Blacklist
  15. 记一次我的Google电话面试经历
  16. 浅谈tabulate
  17. Sql Server数据库中创建视图
  18. 森林病虫防治系统(二)
  19. 用chatgpt超级写手批量制作抖音带货文案并直接SEO霸屏
  20. 2021Java常见面试题,程序员,看完这十本书再谈工资

热门文章

  1. 安装pandas-profiling错误:Could not build wheels for _ which use PEP 517 and cannot be installed directly
  2. gl linux qt 库_Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)
  3. html报告致谢,论文致谢优秀范文(精选10篇)
  4. 实数在计算机中的表示
  5. 2345看图王如何关闭广告
  6. vue 项目使用 webpack 构建自动获取电脑ip地址
  7. 我的小游戏上线海外AppStore完整流程心得
  8. 软件需求说明及对应的测试用例,测试用例与需求的对应关系 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  9. openoffice java awt_使用openoffice转pdf,详细
  10. 在nginx环境下同一个网站目录下放2个或者多个zblog程序nginx伪静态规则如何写