今日终于得空,补一篇html5做的山寨版愤怒小鸟的技术贴,共入门级参考。

主要有以下几点,主要是一些链接,供大家学习

1.游戏框架
2.Sprite sheet和Animition
3.box2D
4.Audio

1.游戏框架

http://www.brighthub.com/internet/web-development/articles/40512.aspx

http://www.brighthub.com/internet/web-development/articles/40513.aspx

简单而是用的小游戏框架,为你创建好了canvas,而且用了double buffer的canves

主要的类图如下:

框架定义了GameObject基类,游戏中每一个可以活动的部件均可以继承它,还定义了VisualGameObject类,它继承自GameObject类,添加了draw方法,游戏中可见的部件可以从它继承,实现自己的draw方法,draw方法带有参数,就是canvas的context。所有GameObject由GameObjectManager管理,所有自定义的GameObject子类的对象都需要添加到GameObjectManager,它有一个draw方法会被定时调用,如果每1/30秒调用一次,那么你的游戏从设计上来说就是30FPS的。这个方法会把它管理的所有GameObject都调用一遍draw方法(如果有的话),实现所有GameObject的定时重绘,这个就是大家常看到的游戏设计里的主循环。它的功能好比windows编程里的消息循环一样。

有了这个framework,你要做的就是继承VisualGameObject,实现draw方法绘制知己,实例化并添加到GameObjectManager中即可。

2.Sprite sheet和Animition

Sprite sheet就是精灵表。

http://codeutopia.net/blog/2009/08/21/using-canvas-to-do-bitmap-sprite-animation-in-javascript/

这篇文章讲解了如何自己实现Animation,主要原理简述如下:

定义SpriteSheet类,它负责从一张大图中剪切出我们需要的一个个小图。把所有你游戏重要到的图片做成一张大图,提高性能,多个小图意味着客户端需要发起多次web request,每个http request含有head,tcp,ip等都含有head,减少请求次数意味着较少数据流量,这个好处你懂的。貌似html5中的websocket就是用的这个原理,来提高系统吞吐量的,将http连接upgrade成websocket,之后所有的双向通信都直接传数据,最少只需要两个字节的表头。

Animation类负责将各个剪切出来的小图拼接成动画,每一个小图是一帧,每一帧定义一个duration,每一帧显示的duration完了,就显示下一帧,然后循环,看起来就是连续的动画了,其实是欺骗了你的眼睛。

3.box2D

随着AngryBird的火爆,这个库也进入了广大开发者的视野,现在介绍这个库的文章太多了,我就不啰嗦了,只写几个关键点:

box2D源代码使用c++开发,可以从http://box2d.org/下载到最新版本和文档,它port到了各种平台,如java,c#,flash,javascript。我是用的是box2Dweb,这个javascript库是从actionacript库port过来的,可以从http://code.google.com/p/box2dweb/下载。

Seth Ladd写过几篇很经典的入门级文章:http://creativejs.com/2011/09/box2d-javascript-tutorial-series-by-seth-ladd/

这个库的适用范围是几米到几十米之间,也就是牛顿定律的使用范围(不含天体运动),对于微观离子的运动,用这个库是不合适的,太大的范围也不精确。

速度太快是可以穿越的。这个是我测试过的,如果给小鸟太大的力,使其速度过快,它能够穿越木头。原因是box2D的库每1/60秒(可配置)是一个step,它会计算每个step结束时各个刚体(Rigid body)应该在什么位置,如果发现有重叠的,就认定在这个step中会有碰撞发生,会触发碰撞事件,并且修正刚体的位置,使其不重叠,但是如果某一个刚体速度太快,在这个step结束的时候已经成功穿越的另一个刚体,则碰撞就无法被检测到,实现了穿越。

4.Audio

在html5里,audio实现起来非常简单

this.getAudio = function(id){
    if(this.audios[id] == undefined) {
        this.audios[id] = new Audio();
        this.audios[id].src = "music/"+id;
        this.audios[id].load();
    }
    return this.audios[id];
};

var audio = this.getAudio("title_theme.mp3");
audio.loop = true;
audio.play();

作为一个windows平台程序员,发现web在处理事件时与windows桌面应用有不同之处。桌面程序在处理鼠标或键盘事件时,注册一个事件处理方法就可以了,当事件发生时,这个事件处理方法就会被调用执行。但是web有点不一样,加入你的游戏时30FPS的,1/30秒你的程序才获得一次执行机会,但是在这短短的1/30秒时间内,可能已经发生了好几次鼠标键盘事件,所有需要在事件发生时记录下事件类型及状态,当程序获得执行机会时,读取刚才这些记录,处理事件,删除记录。

介绍及源代码下载:

http://www.cnblogs.com/piyeyong/archive/2011/12/30/2307366.html

转载于:https://www.cnblogs.com/piyeyong/archive/2012/01/19/2327479.html

如何做html5山寨版愤怒的小鸟相关推荐

  1. java jquery愤怒的小鸟_如何做html5山寨版愤怒的小鸟

    如何做html5山寨版愤怒的小鸟 15 作者:管理员发布时间:2021/1/26 19:15:54评论数:0 简单而是用的小游戏框架,为你创建好了canvas,而且用了double buffer的ca ...

  2. 愤怒的小鸟的html制作,如何做html5山寨版愤怒的小鸟

    简单而是用的小游戏框架,为你创建好了canvas,而且用了double buffer的canves 主要的类图如下: 框架定义了GameObject基类,游戏中每一个可以活动的部件均可以继承它,还定义 ...

  3. 利用html 5 websocket做个山寨版web聊天室(手写C#服务器)

    在之前的博客中提到过看到html5 的websocket后很感兴趣,终于可以摆脱长轮询(websocket之前的实现方式可以看看Developer Works上的一篇文章,有简单提到,同时也说了web ...

  4. 好程序员分享做HTML5页面你要懂得这些

    为什么80%的码农都做不了架构师?>>>    好程序员分享做HTML5页面你要懂得这些,很多人问过我这个问题,而问这个问题的人基本上都是刚听说过HTML5,处在懵懂的阶段,他们往往 ...

  5. 分享:在微信公众平台做HTML5游戏经验谈(转载与http://software.intel.com/zh-cn/blogs/2013/04/03/html5)...

    分享:在微信公众平台做HTML5游戏经验谈 Dawei Cheng 程大伟... 于 星期三, 03/04/2013 - 03:19 提交 最近微信公众游戏平台讨论得如火如荼,大有HTML5游戏即将引 ...

  6. html游戏怎么做,HTML5 制做“游戏”的一个基本流程

    怎样用HTML5 Canvas制作一个简单的游戏 为了让大家清楚HTML5制作游戏的简单流程,所以先了制作一个非常简单的游戏,来看一看这个过程. 游戏非常简单,无非就是英雄抓住怪物就得分,然后游戏重新 ...

  7. html5 游戏制作教程,【整理】一步一步学做HTML5游戏教程

    本帖最后由 蓝色力量1221 于 2012-11-29 01:26 编辑 游戏源码下载地址:http://l13.yunpan.cn/lk/QMQFfWQjvWGvg 该游戏教程主要参考了老外Jaso ...

  8. 菜鸟做HTML5小游戏 - 翻翻乐

    记录下开放过程.做小游戏开发,又要跨平台,flash又不支持iPhone,html5是最好的选择. 先看看最后效果: 好了,开始demo. 1.准备工作: 图片素材(省略...最后代码一起打包) 了解 ...

  9. 菜鸟做HTML5小游戏 - 刮刮乐

    继上篇翻翻乐之后,又来刮刮乐.还是先上效果图: 开始demo的世界: 1.css去绘制界面效果.(源码提供) 2.原理:要实现刮刮卡内容的出现,我用div做了背景层去显示刮出的内容结果[重点].中间C ...

最新文章

  1. Digit Sum II( ABC044ARC060)
  2. 将tensor张量转换成图片格式并保存
  3. 五、分治法应用--矩阵乘法
  4. Java工作笔记-webService发布时通用的4个注解
  5. RocketMQ如何动态扩容和缩容
  6. Cesium入门-1-展示一个地球
  7. fanuc机器人码垛编程实例_两个很简单的FANUC系统CNC加工中心编程实例
  8. Python全栈开发——subprocess struct
  9. 第3章 快速开始:HelloWorld 《Kotin 编程思想·实战》
  10. 《进击的虫师》百度文库下载器
  11. [自我介绍]第一篇博客
  12. nali命令--输出IP地址显示地理信息
  13. django接入facebook登陆设置
  14. 网络层—简单的arp断网
  15. 键盘上每个键作用!!! (史上最全的)
  16. 旧上海老大杜月笙语录
  17. 如何判断一家公司靠不靠谱
  18. 未来哪些行业值得加入?
  19. OpenCV学习(二)---树莓派上安装opencv
  20. Xcode各种iOS版本模拟器的安装使用

热门文章

  1. iOS开发——项目中的地图跳转(苹果地图,百度地图,高德地图)
  2. Dynamic ReLU 解读
  3. 如何给结构体内声明的二维数组赋值
  4. 六大银行结算账户的区别
  5. WM_QUIT WM_CLOSE 区别
  6. spark完全分布式部署
  7. mysql设置外键_mysql怎么增加外键
  8. arduino 1.8.4 安装包
  9. 犬类收容所人员将7只小狗当狗妈妈面摔死
  10. ad17 pcb扇孔_PCB扇孔处理