Cocos2D-HTML5开源2D游戏引擎

http://www.programmer.com.cn/12198/

Cocos2D-HTML5是基于HTML5规范集的Cocos2D引擎的分支,于2012年5月发布。Cocos2D-HTML5的作者林顺将在本文中介绍Cocos2D-HTML5的框架、API、跨平台能力以及强大的性能。Cocos2D-HTML5是Cocos2D系列引擎随着互联网技术演进而产生的一个分支。该分支基于HTML5规范集,目标是可对游戏进行跨平台部署。Cocos2D-HTML5采用MIT开源协议,设计上保持Cocos2D家族的传统架构,并可联合Cocos2D-X JavaScript-binding接口,最大程度地实现游戏代码在不同平台上的复用。

Cocos2D-HTML5由Cocos2D-X核心团队主导开发和维护,行业领袖、HTML5大力推动者Google为这个项目提供支持。Zynga、Google等大公司的工程师也参与到Cocos2D-HTML5的设计工作中,在各路高手的协作之下,Cocos2D-HTML5的技术方案和API设计正毫无疑问地朝着 大气、简洁的方向快速发展。

Cocos2D程序员可分为三类:苦逼程序员,把自己游戏针对iOS、 Android、Windows Phone三大主流平台分别用Objective-C、Java、C#移植一遍,不是熬夜换语言重写游戏逻辑,就是学习不同语言为熬夜移植做准备;普通程序员,采用C++,一次编码后争取最大限度地在iOS、Android、Windows 8 Metro之间复用;而作为后PC时代的文艺程序员,我认为跨全平台才是真的跨,配合Cocos2D-X JavaScript-binding,最终目标是能够实现Native App和Web Browser之间的轻松跨越。

图1 Cocos2D-HTML5游戏框架结构

下文就细致地介绍Cocos2D-HTML5引擎以及如何玩转它。

引擎的框架设计

Cocos2D-HTML5引擎框架的设计目标总结下来有两个,第一个目标是 “偷懒”,引擎运行目标平台是所有的平台,无论是PC浏览器还是移动浏览器,;第二个目标还是“偷懒”,兼容Cocos2D系列引擎,让已掌握开发要领的同学可以继续偷懒,让没有学过的同学可以轻松悟透、轻松入门、晋级。

在引擎的框架设计中,渲染层是Canvas或WebGL,如果浏览器支持WebGL,自动优先选择WebGL,运行速度会快一点,要是不支持也没关系,Canvas通过性能优化后,比起WebGL一点也不逊色。

区别于其他Cocos2D系列引擎设计,Cocos2D-HTML5引擎框架引入了Dom Menu的设计,浏览器支持多语言的优势得到了传承,开发者再也不用为游戏的多语言发愁了,再也不需要辛苦地到处找字库、贴图了,因为在引擎内已准备好了。值得注意的是,Dom实现的各项菜单还有各种动作和特效,甚至和Canvas可以实现互动,让开发者一点都感觉不到Dom的存在。

图2 UI Dom分层结构

引擎的API封装和使用介绍

框架设计得简洁明了,API当然也不能复杂,Cocos2D-HTML5在API的封装上,直观易懂,最大程度地保留原Cocos2D系列的API的使用习惯,保持发扬偷懒的风尚,使开发者可以在悟解框架之后轻松继续晋级。

在引擎的设计和开发中,采用的是John Resige类的继承方法,在使用上类似于C++,适合原有Cocos2D系列的游戏资源进行快速1:1移植,我们的目标是实现机械式翻译,因此期待自动翻译的工具出现。

当然,Cocos2D-HTML5引擎面向的是Web,引擎在高级API的封装上,根据JavaScript语言的特点重新进行封装,满足广大前端程序员、JavaScript开发者的使用习惯:Write less,do more。

API足够容易使用。在其代码仓库有专门的目录,其中为开发者准备了各种Demo,所有的引擎功能都有对应的test case展示其用法,开发者可以在这个基础上快速掌握各种功能和特效的使用,还有更简单的方式—直接拷贝组合应用于游戏开发中。

此外,引擎采用原生的JavaScript语言开发,可兼容其他成熟的JavaScript框架,开发者可以在引擎的基础上自由选用合适的框架,加速游戏的开发进度。

引擎的跨平台能力

在互联网领域,各个浏览器之间存在大量的标准和不兼容,引擎一定要将这种耗费无谓青春的行为扼杀。在引擎的设计中,通过浏览器能力检测和适配器模式,消除不同浏览器带来的运行环境的差异,兼容不同浏览器的事件处理,抹平不同浏览器之间的各个坑,让开发者能在平坦的道路上加速前进,快乐写代码。抹平了差异,再也不需要做重复无价值的工作,基于Cocos2D-HTML5开发的游戏终于可以轻松穿越操作系统运行在各浏览器上了。

采用Cocos2D-HTML5这类更高级语言引擎进行游戏开发,开发效率更高,加上丰富的工具集支持、实时的各种调试手段和云合作开发手段,更加直接的效果调校方式,完全没有开发环境依赖,各种优势的叠加,可以大幅度降低开发成本,提升游戏的上架速度。

如果觉得这样还不够,还有更好的选择,引擎的高级API和Cocos2D-X JavaScript-binding引擎API是相同的,同一份JavaScript游戏代码不用修改或者小范围修改,配合JavaScript-binding引擎就能以Hybrid的方式直接作为本地应用发布。

通过两种发布方式的结合,Cocos2D-HTML5可实现立体覆盖,通过它开发者就能以一个更快、更惬意的方式实现自己的想法。

引擎的性能

引擎通过一系列的优化措施,在设计之初就注重各项功能的实现和性能的有机结合,保证引擎在使用上没有各种性能上的短板。

目前引擎通过优化,运行起来已符合“复杂”游戏运行的性能要求。但不可否认,引擎采用的是脚本语言,且运行在浏览器这个特殊的环境中,引擎的效率相对于本地应用性能会低一些。

HTML5游戏引擎中,WebGL性能够强,可惜不是所有浏览器都能支持,要实现伟大的跨平台目标,引擎就必须兼容性能次之的Canvas。还好Canvas的表现还不错,经过优化,Canvas模式下引擎性能表现毫不逊色。

各项性能优化工作如图3、图4所示,如有更好的方案请不吝赐教。

图3 优化之前的TileMap测试例(4400个Tile 8.7帧)

首先,从逻辑层面和渲染层面相互配合,引入DirtyRegion的方法,利用少量的逻辑控制,在耗时最大的渲染环节,不该重画的部分坚决不画。通过优化,需要做的事情变少了,渲染效率高了,带来的更大利好是系统级别的省电,在移动设备上,这个优势会变得日益明显。

图4 优化之后的TileMap测试例(4400个Tile 60帧)

其次,引擎利用临时Canvas作为缓存,用来缓存需要大量渲染处理的图层中间结果,频繁使用时,直接复制,不需要经过繁琐的步骤获得。通过优化可提升渲染环节的处理效率,加速引擎在特定情景模式下的运行速度。

下面列举一个性能对比的例子:在进行优化之前,运行TileMap测试例,4400个Tile构成的地图,每次在画面中显示,都需要将无数多的Tile拼成一幅图,再显示出来,想想也知道会多么浪费资源。在Mac Pro 13寸上的Chrome浏览器上,Canvas模式下只能运行到8-10帧。引擎通过图层缓存来优化,效果立竿见影,相同环境运行帧率立刻就有60帧了。

那么就只能达到60帧吗?其实不是,只有60帧是因为浏览器有帧率控制。为了看到极限速度,可以将Chrome的帧率限制关闭掉,硬耗CPU计算,可以看到这个测试例的满负载帧率可达250多帧。不过,如此大的帧率已超出显示器的显示范畴,没有实际意义,它只是用来告诉我们它究竟能跑多快。

图5 关闭Chrome VSync的测试例(4400个Tile 251帧)

最后,引擎性能优化工作还体现在不可视区域渲染和像素级渲染的优化上。Canvas默认是画出你要它画的所有东西,是个忠实的执行者,不管你是否画在了不可视区域内,不像OpenGL会把不可视区域自动优化掉。所以我们选用手动模式,优化之后效果也是非常卓越的。

至于像素级的渲染优化,在非拼接类型的Sprite、Label等资源,就可以应用这类型的优化手段了,其原理是避免了Sprite渲染位置处于在两个像素之间,Canvas要去产生边缘各是半个像素的渲染的情况,提高Canvas的渲染效率,同时还可以获得更好的显示效果。

通过优化前后显示效果的对比,可以看出在优化之后,Canvas只需直接渲染显示原始的资源图片,而不需要做像素级别的调整处理。

图6中,优化前人物裤子上的线本来是单个像素的宽度,结果显示位置刚好在两个像素之间,Canvas要运用虚影、叠加等各种手段在上面2个像素的区域模拟出1个像素的效果,可以说出力不讨好。

通过优化,Canvas可以避免这种严重浪费资源的情况,直接渲染加载图片,提升Canvas的渲染效率,同时获得没有虚影的更佳显示效果。当然,需要拼接的资源不能采用这样的优化方法,防止出现渲染真空地带,但很多类型的游戏,存在大量不需要拼接的资源,有广阔的运用空间。

在Canvas模式下,引擎还优化了Tint的功能,通过图层拆分得到红、绿、蓝和黑色四个基色的图层,然后通过数学方式叠加得到想要的各个颜色效果,避免了用像素级别渲染这种效率极低的方式来实现Tint功能,从而大大提高了Tint功能的执行效率。

当然,这里讨论的都是Canvas模式,用WebGL实现这个功能同样无压力。

在浏览器支持WebGL硬件加速模式下,引擎的压力就小很多了,其渲染性能远远高于Canvas模式,各种优化措施更加齐全,这里就不一一列举了。通过性能优化,引擎渲染环节占用的时间缩到最小,引擎可以支撑更复杂的游戏流畅运行,各种更炫的效果也更多,各位开发者在使用时就不会有如履薄冰的感觉了。

图6 优化前后的显示效果对比

结语

经过各方不懈的努力,现在Cocos2D-HTML5引擎终于踏出了坚实的第一步,目前已经发布了Alpha版本。

可能很多人还在抱臂观望HTML5的游戏发展, 而Cocos2D-HTML5游戏引擎已经出发了,我们会将《捕鱼达人》游戏移植到Cocos2D-HTML5,让这个游戏来进一步趟平浏览器上各种各样的坑和引擎的Bug。

时间之梭没有停止,各类型设备计算能力正飞速提升,运行性能上的约束会越来越小,Cocos2D-HTML5凭借其在开发便捷、成本低和发布渠道多样化的优势,会获得越来越大的应用空间,变成游戏开发者优先考虑的游戏引擎,很快就有这么一天到来,不管你信不信,反正我们是.相信了,并在为之努力。

Cocos2D-HTML5项目还处于初期阶段,如果开发者在使用时遇到问题,欢迎登录http://www.cocos2d-x.org论坛提意见。作为开源项目的Cocos2D-HTML5要想走得更远,离不开大家的帮助。

作者林顺,开源引擎Cocos2D-X的共同创立者和核心开发者,目前负责Cocos2D-HTML5开源引擎项目的开发,致力于构造一个跨多平台和跨浏览器的游戏框架。

本文选自《程序员》杂志2012年06期,未经允许不得转载。如需转载请联系 market@csdn.net

《程序员》2012年杂志订阅送好礼活动火热进行中

转载于:https://www.cnblogs.com/zsw-1993/archive/2013/02/21/4880377.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

illustrator下载_Illustrator笔工具练习

illustrator下载Adobe Illustrator is a fantastic vector creation tool and you can create a lot of things without ever using the Pen Tool. However, if you want to use Illustrator at its full potential, I personally believe that you need to master and become …

怎么更好练习数位板_如何设计更好的仪表板

怎么更好练习数位板重点 (Top highlight)Dashboard noun \ˈdash-ˌbȯrd\ A screen on the front of a usually horse-drawn vehicle to intercept water, mud, or snow.仪表盘 名词\ ˈdash-ˌbȯrd \\通常在马拉的车辆前部的屏幕,用来拦截水,泥或雪。…

学习正则表达式

deerchao的blog Be and aware of who you are. 正则表达式30分钟入门教程 来园子之前写的一篇正则表达式教程,部分翻译自codeproject的The 30 Minute Regex Tutorial。 由于评论里有过长的URL,所以本页排版比较混乱,推荐你到原处查看,看完了如果有问题,再到这里来提…

人物肖像速写_去哪儿? 优步肖像之旅

人物肖像速写In early 2018, the Uber brand team started a rebranding exercise, exploring a fresh take on what it means to be a global transportation and technology company. A new logo was developed in tandem with a bespoke sans-serif typeface called Uber Mo…

hp-ux锁定用户密码_我们如何简化925移动应用程序的用户入门— UX案例研究

hp-ux锁定用户密码Prologue: While this is fundamentally a showcase of our process in the hopes of helping others, it’s also a story about the realism of limitations when working with clients and how we ultimately were able to deliver a product the client w…

微信公众号无需二次登录_您无需两次解决问题-您需要一个设计系统

微信公众号无需二次登录重点 (Top highlight)The design system concept can be differently defined according to each person’s background. Designers may say that a design system is a style guide while developers may say it is UI standards, or specs, or even as…

视觉工程师面试指南_选择正确视觉效果的终极指南

视觉工程师面试指南When it comes to effective data visualization, the very first and also the most critical step is to select the right graph/visual for the data that you want to present. With a wide range of visualization software that is available offerin…

问题反馈模板_使用此模板可获得更好,更有价值的UX反馈

问题反馈模板Feedback is an important part of UX design. To improve the work you do you need to be able to give and receive feedback. Receiving valuable feedback is for a very large part up to you.反馈是UX设计的重要组成部分。 为了改进您的工作,您需…

iofd:文件描述符_文字很重要:谈论设计时18个有意义的描述符

iofd:文件描述符As designers, many of us think we’re just visual creatures. But creating visuals is only half of the job. The other half is verbal communication — actually talking about design. Whether we’re showcasing our own work, giving or receiving c…

保护程序猿滴眼睛-----修改VS 2008 编辑器颜色 (修改 chrome浏览器的背景色)

前几天更改了 chrome 的背景色后,虽然有些地方看起来不和谐,想百度的首页,显示出了大快的图片区域,但是,整体感觉这个颜色设置真的对眼睛有一定保护作用。。。 所以,再顺便修改一下 经常用的 vs2008 编辑器…

数据可视化 信息可视化_可视化哲学的黎明

数据可视化 信息可视化Note: this is the foreword of the book Data Visualization in Society (Amsterdam University Press, 2020)注意:这是《 社会中的数据可视化 》一书的前言 (阿姆斯特丹大学出版社,2020年) Geographer John Pickles once wrote …

HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面...

详细错误:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面. 出现环境:win7 IIS7.0 解决办法:IIS的根节点->右侧“ISAPI和CGI限制”->把禁止的DotNet版本项设置为允许…

重口味动漫_每种口味的图标样式

重口味动漫The icons are, without a doubt, one of the most used graphic elements today in the interface design of digital products. And to make this statement with some degree of certainty, we do not even need a very robust statistical analysis. Just rememb…

从头开始vue创建项目_我正在以设计师的身份开始一个被动的收入项目。 从头开始。...

从头开始vue创建项目Do you ever read an article on Medium (or elsewhere) about passive income, side projects and big money making blogs? When I read such an article it looks like it is easy to do yourself if you just put in the work. To see if that is the …

Exaple2_1(显示转换)

public class Example2_1{ public static void main(String arg[]){ char ca; System.out.println(""c"unicode:"(int)c); System.out.println(":"); for(int i(int)c;i<c25;i){ System.out.println(""(char)i); } }}转载于…

英国文化影响管理风格_文化如何影响用户体验

英国文化影响管理风格重点 (Top highlight)The Internet makes the world a smaller place. You can make money or gain users outside of your demographic with a digital product or service easier than a physical business. But, is selling the exact same design of t…

element ui 空格_空格是您的UI朋友。 大量使用它。

element ui 空格Originally published at marcandrew.me on July 30th, 2020.最初于 2020 年7月30日 在 marcandrew.me 上 发布 。 Ah good old White Space. One of the simplest things to add to your designs to improve both your UIs, and user experience. Let me shar…

qt 设计师缩放_重新设计缩放体验

qt 设计师缩放With the COVID-19 pandemic hitting countries across the world, a lot of people have now switched to video meetings. Be it for your official meetings, webinars, entertainment sessions — video meetings are the new normal. We saw these video mee…

安卓应用部件_设计应用程序小部件的痛苦和喜悦

安卓应用部件Some people say widgets are a thing of the past, but recently we faced a market for which this was one of the main features users were asking for. A bit of googling showed there are not a lot of useful articles covering widget design (most info…

ux设计中的各种地图_UX设计中的空白

ux设计中的各种地图UX设计中的空白是什么&#xff1f; (What is white space in UX design?) This article will help you learn about white space and why it so important in UX design.本文将帮助您了解空白以及为什么空白在UX设计中如此重要。 White space is a very us…