博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两个Canvas小游戏
阅读量:7072 次
发布时间:2019-06-28

本文共 1530 字,大约阅读时间需要 5 分钟。

  或许连小游戏都算不上,可以叫做mini游戏。

  没有任何框架或者稍微有点深度的东西,所以有js基础的或者要追求炫酷效果的可以直接ctrl+w了。

  先贴出两个游戏的试玩地址:

   

  • 基础

  接下来简单说说怎样开发这样的基础游戏。

  首先你要懂得canvas上的基本api,可以参考;如果你喜欢e文,也可以参考岑安推荐的

  接着进入主流程,这样的canvas小游戏基本上都是基于每帧重绘,一般有下面这样的过程:

 

  重绘的话可以用setInterval,但是最好用requestAnimationFrame,好处很多,可以自行搜索。(为什么我还是用了setInterval?因为我懒...)

  游戏中的物体,如果可以的话,都可以写成一个类的形式,类里面设置一些需要的属性(比如长、宽、速度等)和方法(比如draw、update等)。

  这里要引入向量这个概念,位置、速度、加速度等都可以用向量表示。可以试着写一个适合自己的向量模板,你会发现很多事情会变的简单。比如这样:

  

  • 碰撞

  如果游戏再稍微复杂点,可能有碰撞检测的需求,比如第二个游戏中就有圆形碰撞的检测。

  矩形和圆形之间的碰撞很简单,画画图就能明白,稍微繁琐点的是像素级别的碰撞。

  什么叫做像素级别的碰撞?举个栗子,比如下面这样:

  • 先对字所在的图片的两个矩形进行检测,如果没碰撞,直接return false
  • 如果矩形碰撞,可以用getImageData,分别检测两图在相交矩形中的像素(蓝色矩形内),如果有一个像素点在两图中都存在,则return true;或者可以将globalCompositeOperation改成destination-in再检测,具体可以参考,原理类似。

 

  • 鼠标键盘事件

  怎么记录鼠标键盘事件?

  鼠标事件不多,可以分别监听判断;键盘事件可以设置一个关联数组,比如:

var keyState = [];keyState[e.keyCode] = true;  // keydownkeyState[e.keyCode] = false; // keyup

  

  • demo

  下面针对第一个demo来简单说说。

  首先我们发现除了一些文字外,游戏主体就是由几个矩形,一个圆形和一根线段构成的,组成很简单,每帧的数据更新其实就是这几个图形数据的更新。

  如何更新?因为游戏中的几个过程我设置成了串行,比如线段增长、线段旋转、圆形移动、画布整体左移,所以我给每个过程设置了一个判断变量,轮到哪个步骤执行了哪个变量就设置为true,而该步骤中的数据进行更新。比如下面这样:

if(this.linegrow && !this.linemove && !this.ballmove &&!this.basepointmove)  this.lineLen +=7;if(this.linegrow)  // lineAdd  v2 = new Vector2(v1.x, v1.y - this.lineLen);

  数据更新完就可以画了,有了数据要画出来就相对简单了。

  这里的画布左移我用了translate,没去看类似的小游戏是怎么实现的这个效果的,有空去看下。

 

  • 扩展

  做个这样简单的小游戏实现其实并不难,如果有兴趣的话可以试试同类型的,比如贪吃蛇、是男人就下100层等等。

  想试试稍微复杂点的,可以看下W·Axes写的两个游戏:  

  其实我的第二个游戏demo的创意完全来自于岑安的,里面也有具体说为何要用requestAniamtionFrame。大家有空可以看看岑安的文章,篇篇精品。

  参考资料:

  

  

 

 

  

 

转载地址:http://tjkml.baihongyu.com/

你可能感兴趣的文章
Oracle的rownum原理和使用(整理几个达人的帖子)
查看>>
json_encode详解,转义
查看>>
真正的人工智能离我们有多远
查看>>
页面制作部分之PS切图
查看>>
ThinkPhp学习11
查看>>
C#:Md5和Sha1两种加密方式
查看>>
linux -- ubuntuserver 安装图形界面
查看>>
阅读小记3(《C编程专家》)
查看>>
linux cmd
查看>>
VS2010中的调试技巧
查看>>
[译] 一、为何要推出AppCoda系列?
查看>>
HDU4685 Prince and Princess 完美搭配+良好的沟通
查看>>
Spring AOP在pointcut expression解析表达式 并匹配多个条件
查看>>
建立完整的单向动态链表(包括初始化、创建、插入、删除、查找、销毁、输出)...
查看>>
如果有一天你没有了动力,可以看看
查看>>
选择算法
查看>>
反射获取指定类型
查看>>
springJDBC一对多关系,以及Java递归,jsp递归的实现
查看>>
Codeforces Gym 100733A Shitália 计算几何
查看>>
configure: error: png.h not found.
查看>>