以圆桌骑士为例浅尝HTML5游戏开发
随着XHTML的逐渐式微,Chrome,Safari,FireFox,Opera等现代浏览器正在积极完善HTML5实现,IE9也加入到标准的行列并将在今年上半年发布正式版,HTML5时代来临了。
在各种HTML5特性中,最吸引人的莫过于canvas标签,其提供的绘图API将颠覆以往web表现力匮乏的形象。随着浏览器对canvas的普遍支持,利用canvas实现的web应用会出现爆发性的增长。
本人尝试了使用canvas开发2d卷轴游戏,与大家分享。
本文将不介绍canvas2d API的用法,如果想了解canvas2d API请访问:https://developer.mozilla.org/cn/Canvas_tutorial
可行性研究
尝试制作的游戏是Knights of the Round 圆桌骑士。
圆桌骑士(knights of the round)是由CAPCOM公司于1991年推出的一款动作游戏,对应游戏平台为街机,游戏基板为CPS1。游戏操控性上,圆桌骑士也更为注重一招一式地砍杀感觉,那种刀碰铠甲的感觉相当曼妙。
现在的问题是,实现一个模拟器还是手工复刻。
用JS制作CPS1模拟器,涉及到ROM解码,68000汇编等技术,此非能力所及故不可行。有能力的大牛不妨试试,现在已经有JS实现的NES模拟器了。最后选择了纯手工复刻。
下一个问题是帧率,60FPS还是30FPS?显而易见,60比30更有表现力,视觉感受更流畅。
CPS1的帧频是60FPS,要提高仿真度,帧频必须达到60。带来的问题是对性能的苛刻要求。
工欲善其事必先利其器
动作游戏的核心在于各种精灵的动作。
需要一种工具,能够方便的创建,编辑,精灵所需要的帧与动作。
在写游戏之前,必须完成基础设施建设。为此开发了SpriteEditor工具,纯JS开发,利用dataURIscheme与图片另存为功能保存json格式的精灵配置文件。
精灵编辑器
使用编辑器的好处是能以可视化的方式管理精灵帧,动作与判定区。另一种解决方案是使用规则的图片,在程序中生成维护帧和动作。这种方式与资源图片耦合较高,不方便维护。扩展性也有限,例如某几个动作需要同一帧,只好在连续图片中重复,产生不必要的冗余帧。利用编辑器可以方便解耦程序和图像资源,编辑器负责分析图片并产生配置文件,游戏程序负责解读配置文件并还原,利于团队协作。
游戏系统结构
典型游戏软件系统结构图
典型游戏软件系统结构类似MVC。游戏状态相当于Model,渲染器相当于View,控制器就是Controller了。仿真器介于Model和Controller之间,理解起来比较简单。
canvas效率与兼容性
canvas渲染效率很不错,在Chrome里分辨率384*224可以轻松跑到200帧/每秒以上。不过拉伸后效率下降较严重。IE9得益于强大的硬件加速,即使放大10倍,帧率也不低于60。相比之下其他浏览器惨不忍睹,帧数不到两位数。Chrome开发版开启硬件加速反而变慢了。
比较杯具的是canvas仍存在兼容问题:
IE9 beta目前还不支持globalCompositeOperation
其他浏览器的globalCompositeOperation 效果也不是完全一致。
Opera的save和restore与其他浏览器不一致。
IE9 canvas如果使用了drawImage再调用toDataURL会导致浏览器崩溃等等。
globalCompositeOperation兼容情况 ,IE9beta不支持。(其中截图来自网络)
游戏优化
考虑使用多个canvas分层渲染,避免多次渲染相同部分,但分层的粒度要把握好,如果canvas过多在dom上的开销可能超过收益。
考虑使用脏矩形技术,只更新产生变化的区域。注意在不同浏览器中收益不同,甚至会产生负收益。
使用setInterval代替setTimeout效果较好。
避免给每个精灵设置定时器,太多会造成队列阻塞。尝试在一个定时器中处理多个精灵动画。
避免给多个对象绑定事件监听,使用统一的事件代理。
总结与展望
虽然目前HTML5还存在不少问题,但仍值得期待:
- 缺少成熟的开发框架和环境。
- 仍然存在较大的兼容性问题。
- 商业化难题,JS程序易被篡改,只能作为渲染终端。
这是一次使用新技术的探索与实践,希望能以此抛砖引玉,创造出更有价值的应用。
以圆桌骑士为例浅尝HTML5游戏开发相关推荐
- HTML5游戏开发(四):飞机大战之显示场景和元素
<HTML5游戏开发>系列文章的目的有:一.以最小的成本去入门egret小项目开发,官方的教程一直都是面向中重型:二.egret可以非常轻量:三.egret相比PIXI.js和sprite ...
- HTML5游戏开发(十)
HTML5游戏开发(十) 一.动画 1.动画循环 在Canvas中这病动画效果很简单:只需要在播放动画时持续更新并绘制就行了.这种持续更新与重绘叫就动画循环. (1)通过requestAnimat ...
- 【Canvas】HTML5游戏开发的基本流程+P2.js物理引擎实战开发
<HTML5游戏开发的基本流程> * 1. HTML5的简述 * 2. HTML5游戏开发所需的环境与工具 * 2.1. 开发环境 * 2.1.1. 浏览器 * 2.1.2. 开发语言 * ...
- HTML5游戏开发pdf
下载地址:网盘下载 迈耶编著的<HTML5游戏开发>共10章,通过10个具体的游戏示例详细介绍HTML5的用法.每章都先列出相关的技术特性并给出了应用的描述,然后讨论了实现这个应用的关键需 ...
- CutJS – 用于 HTML5 游戏开发的 2D 渲染引擎
CutJS 是轻量级的,快速的,基于 Canvas 开发的 HTML5 2D 渲染引擎,可以用于游戏开发.它是开源的,跨平台的,与现代的浏览器和移动设备兼容.CutJS 提供了一个类似 DOM 树的 ...
- HTML5游戏开发系列教程5(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-5/ 最终我决定准备下一篇游戏开发系列的文章,我们将继续使用can ...
- html5游戏开发-零基础开发RPG游戏-开源讲座(四)
了解上三篇的内容请点击: html5[color=rgb(68, 68, 68) !important]游戏开发-零基础开发RPG游戏-开源讲座(一) http://www.html5cn.org/a ...
- HTML5游戏开发(三):使用webpack构建TypeScript应用
<HTML5游戏开发>系列文章的目的有:一.以最小的成本去入门egret小项目开发,官方的教程一直都是面向中重型:二.egret可以非常轻量:三.egret相比PIXI.js和sprite ...
- Html5游戏开发-145行代码完成一个RPG小Demo
lufy前辈写过<[代码艺术]17行代码的贪吃蛇小游戏>一文,忽悠了不少求知的兄弟进去阅读,阅读量当然是相当的大.今天我不仿也搞一个这样的教程,目地不在于忽悠人,而在于帮助他人. 先看de ...
最新文章
- CSS入门之引用、选择器、属性(六分之三)
- 生成唯一字符串算法_面试官问:在分布式场景,生成唯一ID,你有几种方案?...
- 【解决方法】Panda read_csv()把第一行的数据变成了列名,怎么处理
- 抽取随即人员——SqlServer_Proc_Random
- 第7篇:Flowable-Modeler集成之Flowable源码编译
- 十九、动态加载脚本和样式
- Ubuntu安装MPICH3集群计算环境
- html常用表单元素(组件)
- 现代软件工程 阅读笔记
- 智工教育:公务员考试这些知识点你会背了吗?
- 小蚂蚁学cURL笔记(1)
- 用友杨雨春 融合是企业互联网化的下一个主旋律
- Rational Team Concert 2
- 写了个修改器....生化危机4的(3月8日更新了物品修改)
- 写一个自动回复的聊天机器人
- linux的aux命令,Linux中 ps aux 命令
- 基于51单片机蓝牙密码锁
- [二进制学习笔记]Ubuntu20.04关闭开启ASLR
- Android 图文混排 异步加载图片
- 写给前端初学者的Vue入门教程
热门文章
- Windows以及Chrome浏览器的一些使用技巧,快捷键,盲打练习网站分享
- 开发微信公众号支付代码
- 身份证阅读器(新中新)写入受保护内存问题,已解决
- 杭州市建筑工程职称评审工作
- 公布Windows版Flutter
- html 输入框联动显示,js下拉选择框与输入框联动实现添加选中值到输入框的方法...
- 安装Ubuntu 21.04后要做的事
- 记录学习《流畅的python》的一些知识-----对象引用,可变性和垃圾回收
- YOLOV5检测代码detect.py注释与解析
- 图像对齐:Parametric Image Alignment Using Enhanced Correlation Coefficient Maximization