在看了几篇Canvas相关的文章后,发现前两节的代码实现还是有问题,因为知道的少,所以只能在自己已知的知识上做实现。不过还好,这是一个发现的过程,也是一个纠错和完善的过程。我第一次尝试一边学习一遍写博客,我想这也有助我的学习,可以把知识掌握的牢固些,起码忘的慢一些吧:)。

  前两节学习了几个基本绘制的方法,lineTo moveTo和arc,也了解坐标的情况,但写的比较傻,只是单纯的实现。 比如棋盘的起始坐标如果有偏移量,我们还要计算他的具体开始坐标和结束坐标,实际上Canvas有现有的方法提供偏移的功能。 他叫 translate,另外还有缩放scale、旋转rotate,他们都可以用transform代替。所以,在代码方面还会有些调整。不过这个的学习恰巧也让我知道如何实现动画效果。如果多个元素在一个Canvas上,实现动画,必然会需要擦除重绘的情况,如果元素之间有覆盖的情况,擦除就需要多考虑了。当然,简单的办法就是把整个画布根据当然所有元素的位置重新绘制一遍。所以在代码设计方面,需要把不同的元素独立出来,每个元素都有自己的draw方法,并且要依照次序绘制Canvas。

  分析一下游戏所需的元素:1、棋盘(地图)2、泡泡 3、等待区域(新的3个即将进入棋盘的泡泡)4、奖励区域(白搭星、超级百搭星、炸弹)5、统计信息 6、按钮
  所以在对象的设计方面起码要有几类 棋盘(map)、新泡泡区(ready)、奖励区(awards)、泡泡(bubble)、星星1(star1) 、星星2(star2) 、炸弹(boom)、统计积分(score),还要包括游戏背后的数据(data)。 OK,先这么规划,挨个的去实现。先把map和bubble重写了。
  之前把map写成了类,显然是不合适的,因为这个游戏不可能会有多个map,所以直接定义为对象更方便。而泡泡显然需要很多,所以需要写成类比较方便。游戏里面所有对象需要访问的全局变量和常量需要定义在一个game对象里,游戏开始则是调用game.start()的方法。所以先看下game的定义:

var game = {
canvas: document.getElementById("canvas"),
ctx: this.canvas.getContext("2d"),
cellCount: 9,
cellWidth: 30,
lineCount: 5,
mode: 7,
colors: ["red", "#039518", "#ff00dc", "#ff6a00", "gray", "#0094ff", "#d2ce00"],
over: function () {
alert("GAME OVER");
},
getRandom: function (max) {
return parseInt(Math.random() * 1000000 % (max));
},
};

更多相关文章

  1. 如何根据容器更改元素的宽度?
  2. 通过属性名称获取HTML元素
  3. Jquery在两个元素之间更改文本
  4. HTML哪些是块级元素,哪些是行内元素、
  5. 如何使用CSS消除元素的偏移?
  6. KeyPress或KeyDown事件没有得到html元素的buind
  7. 行内元素与块级元素
  8. 固定定位,父元素具有转换
  9. 在c#中获取html元素的实际边距

随机推荐

  1. android 下测试网络的丢包率和延迟 的代
  2. Android APK 文件自动安装
  3. androidd 几个开源框架
  4. Android截屏及图片解析
  5. 实例教程四:采用Pull解析器解析和生成XML
  6. android 相机 前后摄像头判断
  7. Android JNI学习笔记——so文件动态加载
  8. android.inputmethodservice.KeyboardVie
  9. 2.在服务器上使用 gradle 打包 android
  10. Android(安卓)中 AlertDialog 的多种创建