3月23日晚上8点半(中国队火拼韩国的时候),做了一期直播分享。15年做的一个小游戏,把核心代码拿出来,现场讲写了一遍,结果后面翻车了,写错了两个地方,导致运行效果有点问题,直播边说话边写代码还真不一样(可以理解为借口)。我先贴出写错的两个地方。

1.

//self.last['', ''];//重置 这个是写错的
self.last = ["",""];//重置  这个才是正确的

2.

$sword.css({'-webkit-transfrom':'rotateX(' + this.swordRotate[this.rotateIndex] +'deg)', 'display': 'block'});//错的,form写成from了(以前还老说别人常常写错)
$sword.css({'-webkit-transform':'rotateX(' + this.swordRotate[this.rotateIndex] +'deg)', 'display': 'block'});

  直播又不能暂停,当时出了问题真的没检查出来,一直去看逻辑有没有错误,结果全是拼写错误,直到直播结束我才找到问题。 也算是第一次做视频的现场直播,看了一下回放,核心问题应该是讲清楚了,只是听我说话有点难受,语言组织的太差,顿一顿的,还有很多口水语。 如果要看直播回放的朋友前30分钟看看就行了,后面的快进吧。 因为直播的时候好多准备好的东西,没有准确讲出来,下面先用博客来说一遍,最后附上直播地址。

  

需求:

  做的是一个有点类似切水果的游戏,游戏的应用场景在移动设备上,交互方式就是屏幕滑动,对着一只驴一阵乱切(可以想象是水果忍者切最后的那个红色石榴),最后计算规定时间内,切的次数,给予相应奖励。这类游戏的目的不在于多好玩,而在于给用户优惠的同时排队不那么无聊,一个购物的排队过程的一个游戏,主要是还可以根据游戏情况打折,当然根据游戏的特性,还可以用于其它环境。这类H5小游戏都比较简单,使用的技术:jq、html、css。

 

实现细分:

需求已经清楚了,我们来思考下,要实现功能,我们需要做哪些工作:游戏页面-游戏功能交互-游戏结果。

  • 游戏页面: 写好页面,适配(页面不要出现滚动,刚好一屏)
  • 游戏功能交互(如何切驴):驴的区域,手势交互(切驴的算法),切中效果(刀数增加、刀光剑影),倒计时
  • 游戏结果:依据切驴次数展示的最终样式和游戏后的中奖结果,送微信卡券,结果分享......

工作量大部分都在页面和样式上,还有状态的切换,核心功能是手势交互。

核心功能:

  这次分享,其它页面都做好了,直接来写核心代码。就是下面这头驴,如何实现手势滑动,计算切驴的次数。这个可以自己先思考一下,如果是自己做的话,准备怎么去做,自己的方案自己能不能把它实现。方案我想每个人都有想法,但是最终能不能落地,能不能实现这个只有做了才知道。

  我的方案就是获取驴的一个坐标范围,根据手势进出驴的范围,来判断是否算是切一次。比如我上一次手指的位置在驴外面,这次就在里面了,那就说明我是从外到里进去了一次,就算切了一刀,如果再从里面出去,那么又算是一刀。如下图:

  红色区域是监听的touch事件区域,绿色的区域都代表是驴,白色代表手势,通过手势进去这个区域我们统计切的次数。  但是有个问题如果我直接一刀从外面到里面再到外面不反向呢?如下图

  

  我直播里讲错了,写博客我才想起之前的逻辑,源码里也确实不是上面那样算的。 实际是我第一次手指的位置 从“外” 到 “里" 再到 "外"算是一刀;第一次手指的位置从”里“到”外“算一刀。 这样从哪里开始似乎都并没有重复计算。 但是要严格按照真实情况模拟,这样的算法和代码或者具体怎么算一刀的需求,还是需要再进行一次深刻的推敲。但目前的方式算出来,从感官上确实是察觉不到任何问题的,本身游戏也是无条件的给用户优惠,这样的算法也不会让用户受损,或者说大家都是公平的。

  还是来说说具体代码和实现步骤把

  1. 先找到驴的范围:

  $donkey: $('.donkey'),//倔驴的dom
init: function(){var self = this;var $offset = self.$donkey.offset();//获取驴的位置和宽度self.$x = [$offset.left + $offset.width / 5, $offset.left + $offset.width - $offset.width / 5];//0左1右self.$y = [$offset.top + $offset.height / 5, $offset.top + $offset.height - $offset.height / 5];//0上1下return this;}

  以上定义了驴的左右上下坐标,因为驴和菜板是一张图,加减处理的五分之一是截掉后面菜板。

  2. 绑定touch事件

   cut: function(){var self = this,$region = $('.cut-region');$region.on('touchstart', function(){$region.on('touchmove', function(e){e.preventDefault();if(self.cutCount(e)){//去计算是否应该算一次,如果需要计数+1,会返回true
                }});}).on('touchend', function(){$region.off('touchmove');});},

  3. 进出判断计算

  cutCount: function(e){//传入的touch事件对象var self = this;     self.last = ['', ''];var loca = e.targetTouches[0];if(loca.clientX > self.$x[0] && loca.clientX < self.$x[1] && loca.clientY < self.$y[1] && loca.clientY > self.$y[0]){//在驴身上if(self.last[0] == 'in') return false;//上一次同样在里面,不执行if(self.last[0] == 'out' && self.last[1] == 'in'){//上一次在外面return true;}else{self.last[1] = self.last[0];self.last[0] = 'in';return false;}}else{//就在外面if(self.last[0] == 'out') return false;//上一次在同样外面,不执行if(self.last[0] == 'in' && self.last[1] == 'out'){return true;}else{self.last[1] = self.last[0];self.last[0] = 'out';return false;}}},

  last纪录了上一次和上上次手指的位置,这样纪录我们后面才能判断正确。

  剩下的就是去打磨交互效果了,这里就不多说了,可以直接看下源码或者直播回放。

小游戏的思考:

  我做过那么些个小游戏,基本都是自己想方案再写出来实现的,拿到需求的时候需要拆分和评估,先把游戏核心难点找出来单独实现了才行,否则先做其它事情没有意义。 游戏本质是通过视觉、触觉、听觉和本能意识产生与现实相近的体验,利用这几个感官的特性,给人造成逼真的体验,比如视觉上的错位、相对移动,听觉上物体的声音、远近声音大小等等。 对于一些要求并不高的小游戏,我们可以做一些模拟上的舍弃,要实现一个现实模拟,有些时候可能会非常复杂,如果做不到百分百准确,至少先做出一个让人使用起来感觉到基本上是这个东西的版本。 当然如果自己愿意钻研也是好事,不要影响开发进度就好。 如果有一天谁遇到这类的需求,发现这个事情很难做,就要先想办法简化,达到最低要求,再慢慢去优化,不会拆分会给人心理造成负担,容易被一拳头撑死。 如果是做h5小游戏的话,一定要强调html和css,先写好这两个东西,再去使用JS,因为如果html和css不写好,不充分利用其最大优势的话,用js去填补是会消耗很大精力的,会让代码维护和可读性变得复杂,比如说一些轮播图的实现,自己写过的人可能会有所体会。

以下是直播地址 和 github上的源码,有兴趣的看看吧,给个start也好~

直播回放地址https://www.mayigeek.com/mayi-edu-web/user/html/liveShare.html?id=8

看不了的话,复制链接在微信打开吧!

github上的源码https://github.com/zimv/cut-donkey

“倔驴”一个h5小游戏的实现和思考(码易直播)——总结与整理相关推荐

  1. 50行代码写的一个插件,破解一个H5小游戏

    小游戏链接:测测你的眼睛对色差的辨识度http://www.webhek.com/post/color-test.html?from=timeline 废话不多说,先放代码: window.onloa ...

  2. html5制作端午节游戏,意派Epub360怎么制作一个端午节H5小游戏页面?

    六月已经过了三分之一,"粽子节"也马上要到了,每当这时候,又到新媒体运营人和设计师头秃的时刻,在传统的节日里,如何把传统的节日使用互联网元素表现,让更多的年轻人能够参与进来,H5这 ...

  3. html5制作端午节游戏,零代码怎么制作一个端午节H5小游戏页面?

    不光端午节,任何小游戏类型都可以轻松搞定! 六月已经过了三分之一,"粽子节"也马上要到了,每当这时候,又到新媒体运营人和设计师头秃的时刻,在传统的节日里,如何把传统的节日使用互联网 ...

  4. html5 游戏制作软件,制作h5小游戏的免费软件有哪些?

    刚刚过去的618,过段时间要来临的双十一.这些个节日无一不是商家做营销的噱头,各大电商平台也不会放过这么多机会来做商品宣传的.既然人家都要做活动了,不捧场怎么能行,我们要一起做一个买买买的精致猪猪女孩 ...

  5. 用Three.js写h5小游戏-3d飞机大战

    用Three.js写h5小游戏-飞机大战 博主的话 运行图片 目录路径![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829103702978.jpg?x- ...

  6. Unity对H5小游戏开发的支持——Project Tiny

      随着微信小游戏跳一跳的大火,游戏市场对于H5小游戏的开发逐渐火爆,作为一名Unity游戏开发从业者,大家对于Unity中开发小游戏的支持也很关注!近日Unity官方发布了Project Tiny ...

  7. 小游戏开发 小程序app游戏开发 H5小游戏开发

    目前有很多人对小游戏的理解都不同,有的人认为小游戏是H5嵌入形式的,也有的人认为小游戏是就几兆的程序 其实大家认为的都是正确的,没有任何问题.那么今天给大家讲下小游戏之间的区别 1.H5小游戏嵌入:这 ...

  8. H5小游戏是不是风口

    随着移动互联网的发展,出现了几个超级App,  如微信,陌陌, QQ,抖音,今日头条等. 这些超级APP 每天都有几亿的活跃用户,用户玩手机的都集中在这些超级APP上. 对于超级APP而言,他们有流量 ...

  9. html转盘游戏,使用Javascript和CSS3实现一个转盘小游戏(实战篇)

    作者:徐小夕 来源:趣谈前端 本文主要介绍如何使用原生javascript和Css3来实现一个在各大移动应用中经常出现的转盘游戏,由于该实现可以有不同方式,如果熟悉canvas的话也可以用canvas ...

最新文章

  1. python列表解析式_Python基础入门-列表解析式
  2. 将jar文件转换成exe可执行文件
  3. ubuntu18.10安装octave
  4. 蓝桥杯 ADV-66算法提高 阮小二买彩票
  5. yum命令 启用仓库_yum 命令详解-yum仓库配置文件详解
  6. 安装使用 GoldenDict 查词神器 (Windows/Mac/Linux)
  7. 图像识别(五)| 春天花开却不识?打开百度识图,残差和卷积带你识遍路边野花
  8. Python 自带slic代码分析
  9. 考研计算机时间安排表,2019计算机考研这份复习时间表让你自律
  10. spss26没有典型相关性分析_SPSS进行典型相关分析结果总结
  11. RSA2048 public key der格式结构
  12. Discuz论坛密码与密保加密规则
  13. mysql重新初始化
  14. keil手把手创建文件
  15. html怎么实现蓝色垂直的直线,css实例教程 一款纯css实现的垂直时间线效果
  16. 安装Ubuntu 16.04后要做的事
  17. python扇贝每日一句api_扇贝简易爬虫
  18. FPGA NVME IP 核 纯逻辑实现NVME协议,读写SSD
  19. 导数与梯度,切线和法向量
  20. Fuzzy System2021|论文阅读《Optimize TSK Fuzzy Systems for Classification Problems》

热门文章

  1. 工业通讯 | STM32F4xx应用控制器与SoM集成 Ⅱ
  2. 计算机网络习题:应用层
  3. 遥信遥测遥控遥调四大概念介绍
  4. Java 多线程学习笔记(狂神)
  5. 精通Dubbo——Dubbo支持的协议的详解
  6. 手把手做一个JSP入门程序(一):程序基本介绍(JSP)
  7. 人脸检测——RetinaFace解读
  8. 【学习笔记】深蓝学院-三维点云处理
  9. 神奇的口袋——Java
  10. openstack-iass搭建 二