`
zha_zi
  • 浏览: 594062 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

html5 游戏优劣

 
阅读更多

HTML5游戏的优劣势

最近微信公众游戏平台讨论得如火如荼,HTML5游戏的热度也一波高过一波,那么开发HTML5游戏和传统游戏相比有什么优劣势呢?

首先看优势,当属跨平台最受欢迎,开发一套游戏即可在PC,平板、手机中无缝切换,而且统一标准的API也极大地方便开发者。其次,HTML5原生浏览器支持,无需任何插件支持,这对用户来说也是很大的一个优点。最后当属各大公司的鼎力支持,Google,Microsoft,Tecent, UC web等等

然而目前来看,HTML5的劣势主要体现在性能不足和游戏开发特殊API的缺失等,这篇文章将和大家分享在HTML5游戏开发中,常见的技术瓶颈以及如何解决。

输入事件响应

总所周知,游戏玩家点击频率是相当高的,能够达到120次每秒,而一款游戏显示达到30 FPS 即相当流畅,人眼基本感受不出间隔了。那么在HTML5中如何去处理这些输入事件呢? 由于JavaScript的单线程特性,如果原封不动地去处理这些输入事件,那么可想而知,UI现成将完全被阻塞掉。

解决方法分为三步:

1.      在缓存中记录每个输入事件,并非立刻处理事件

2.      在每次渲染时处理缓存

3.      自动清空缓存中已经处理过的事件

示例程序如下,我们分别通过buffer和no buffer情况下,一直按按钮来观察瞬时FPS的变化,通过在IE上面测试有buffer的情况下,性能要高于no buffer情况下20%左右,当点击频率高时,性能提升更加明显。读者可以下载App在本机进行测试。下载地址在本文附件中: 下载

 

时间轴

开发过Flash游戏的朋友肯定对时间轴很有感情,用来做关键帧动画等非常方便。那么在HTML5中有没有时间轴可以用呢?如何精确控制帧动画。

解决方案有两个:

1.    使用setInterval动画可以达到目的,但是setInterval的精度比较低,在空闲状态下setInterval()的精度量级为10ms,setInterval的示例代码如下:

2.    更好的方案是在每一秒里面计算已渲染的帧数,同时设置很小的回调间隔,仅在正确的时间进行渲染,这样可以方便的得到FPS信息, 示例代码如下:

图层

图层是游戏开发中,非常重要的概念,使用图层可以将活动物体和背景静止物体相分离,分开渲染和绘制,仅仅重绘必要部分并缓存以固定模式变化的帧动画来提高性能,通过图层,还可以由Play/Stop/Show/Hide等封装游戏逻辑。在事件处理上,图层同样很重要,通过只处理落在图层上的事件,可以提升游戏体验。但是在HTML5中并没有图层工具,这给游戏开发者增加开发难度。

第一个解决方案是通过共享canvas的逻辑图层,具体步骤为:使用同一个canvas将绘图代码按逻辑关系封装成“图层”。这种方法难点在于如何尽可能缩小重绘区域。它的优点是可最大化绘图性能,方便实现timing function;缺点是图层间无法完全独立,需要反复重绘同样内容。这种方法比较适合于存在大量动态图元的场景。

第二个解决是基于DOM元素层级关系来将Canvas分级创建多个canvas结点,每一个独立渲染,用zIndex管理层级关系。这样来处理的优点是图层互相不干扰,业务逻辑可完全独立;缺点在于动态渲染效率较低。适用场景是背景动画/游戏菜单/独立的动画元件等。

其结构如下:

关键帧

Flash游戏开发中,通过设置关键帧可以快速创建出动画效果,那么在HTML5游戏中,关键帧可以通过以下方法来设置:

第一步,将关键帧事先绘制好,制作成图片,然后配置帧出现的时间点、帧与帧之间的间隔最后将将关键帧图片打包成整张图片。

这个方法对应于两个方案,分别是Canvas方案和CSS Animation的方案。Canvas方案用drawImage绘制图片,通过设置合适的clip区域来动态绘制的关键帧,可使用getImageData/putImageData来绘制。CSS Animation的方案keyframes 和Timing functions来操作。

音频效果

音频效果的处理详见另一篇文章的介绍:用HTML5 Audio API开发游戏音乐

Canvas绘图性能

Canvas绘图是游戏开发最需要注意的点。下图是一款游戏的性能分析,可以看出,stroke占用了84.74%的性能。

我们可以通过以下几个方法来提升Canvas性能:

1.    预渲染场景中的部分物体, 最后一次性Stoke()/fill()

我们分别测试了上图中的直接渲染方案和预渲染方案,结果显示在Chrome中,有接近100%的性能提升。

2.    使用 水平/竖直的直线绘图性能比斜线性能要好,同时可以使用Rotate, Scale等避免多次绘图操作,如下图所示,斜线,四边形等都可以由左边的正方形通过变形得到。

3.    避免做重复的像素操作。在游戏中,经常出现一个角色有不同的配色方案,这时候,我们通过色彩和透明度的调节和叠加比直接像素操作更高效。如我们需要渲染下图中的黄忠,同时我们还需绿色,紫色等等。那么我们通过几种基本颜色进行叠加来获得所要的效果更好。

Canvas的绘图性能一直是游戏开发者最为繁琐的事情,那么下面列出三种替代Canvas的选择,但是也是各有各的有点和缺点:

1.       WebGL-2d使用webGL 渲染2d canvas,WebGL可以充分使用GPU来渲染,提高性能。但是目前浏览器对WebGL的支持度还不如Canvas,尤其在移动端浏览器上面。

2.    SVG + CSS3

Adobe Wallaby将Flash动画导出成 SVG + CSS3 Animation。

3.    简单动画采用DOM元素

通过Absolute positioning: 改变left/top/right/bottom和CSS translate来做动画

第二和第三个方案都仅适合于动画比较简单的场合。

分享到:
评论

相关推荐

    HTML5实现中国象棋游戏.zip

    这款“HTML5实现中国象棋游戏”利用HTML5、CSS3以及JavaScript技术,为用户提供了逼真的在线象棋体验。下面将详细探讨这个项目中涉及的技术和知识点。 1. HTML5 Canvas: HTML5的Canvas元素是一个可编程的2D图形...

    HTML5中国象棋游戏(人机对弈网页版)

    HTML5中国象棋游戏是一款基于网页的在线对弈平台,主要特点是实现了人机对弈功能,用户可以在浏览器中直接体验。这款游戏利用了HTML5这一现代网页技术,使其具有跨平台兼容性和良好的用户体验。下面将详细阐述游戏的...

    HTML5小游戏-五子棋

    HTML5小游戏——五子棋是一种基于网页的交互式游戏,利用了HTML5的先进技术,特别是Canvas元素和JavaScript编程语言来实现。在这个游戏中,用户可以与计算机进行对弈,享受五子棋的乐趣。以下是对这个小游戏涉及到的...

    html5 canvas实现的机器人(AI)五子棋小游戏源码.zip

    这个"html5 canvas实现的机器人(AI)五子棋小游戏源码.zip"是一个使用HTML5 Canvas技术开发的五子棋游戏,其中包含了人工智能(AI)的实现,让用户可以与计算机进行对弈。 首先,我们要理解HTML5 Canvas的基本结构。...

    静态HTML5中国象棋人机对战 chinese_chess 源码

    综上所述,这个静态HTML5中国象棋人机对战项目展示了前端开发中的核心技术和设计理念,包括HTML5的结构化内容、CSS3的美化和JavaScript的动态交互,以及人工智能在游戏中的应用。对于学习和研究Web前端开发,特别是...

    What Is HTML5

    因此,如何平衡HTML5与原生应用之间的优劣,仍然是一个值得探讨的话题。 #### 结论 HTML5不仅仅是HTML4的一个简单升级,它代表了一种全新的思维方式和技术趋势。理解HTML5不仅仅意味着学习其语法和特性,更重要的...

    课程HTML5资料个人专用.zip

    HTML5是现代网页开发的核心标准,它极大地扩展了HTML(超文本标记语言)的功能,提升了用户体验,同时也为开发者提供了更多的工具和可能性。本课程资料专为个人学习HTML5设计,包含多个不同类型的文件,旨在帮助你...

    手机wrap网站(仿凤凰汽车触屏版html5手机wap汽车网站模板

    - **应用场景**:HTML5广泛应用于移动应用开发、游戏制作、多媒体内容展示等领域。 #### 知识点二:WAP与HTML5的关系及其优劣对比 - **WAP简介**:WAP(Wireless Application Protocol)是一种用于移动设备的协议...

    老虎和山羊:用Javascript和HTML5编写的有趣AI游戏

    《老虎和山羊:用JavaScript和HTML5编写的有趣AI游戏》是一款利用人工智能技术构建的互动游戏,展示了在网页开发中如何结合JavaScript和HTML5来实现动态交互与智能决策。这个游戏的核心是通过对抗搜索算法来模拟老虎...

    俄罗斯方块游戏源码

    例如,用C++、Python或JavaScript等语言,配合SDL、SFML、Unity或者HTML5的Canvas等图形库来构建游戏界面。不同的语言和框架各有优劣,例如C++性能优越,Python简洁易读,JavaScript适合网页游戏开发。 三、游戏...

    小游戏源码-你的童年让狗吃了吗.rar

    1. **编程语言**:小游戏源码可能使用常见的编程语言编写,如C++、Python、JavaScript(HTML5游戏)或Unity的C#。不同的语言在性能、易用性和跨平台性上各有优劣。 2. **游戏框架**:源码可能基于特定的游戏开发...

    跳棋游戏源码

    3. **用户界面**:游戏通常会有图形用户界面(GUI),这需要掌握如Qt、wxWidgets、Tkinter等库,或者HTML5/CSS3/JavaScript进行Web开发,用于展示棋盘、交互操作和提示信息。 4. **事件驱动编程**:在GUI编程中,...

    纯JS中国象棋人机对战源码 .zip

    这是一个基于JavaScript实现的中国象棋人机对战游戏项目,主要使用HTML、CSS和JavaScript技术构建。这个项目包含了丰富的编程知识点,以下将详细介绍其中的核心技术和关键功能。 首先,`chineseChess.html`是项目的...

    js编写俄罗斯方块.zip

    4. 使用Canvas或HTML元素:可选择使用HTML5的Canvas绘制游戏画面,或者使用div元素模拟,两种方式各有优劣,Canvas提供更强大的图形操作,而div元素易于理解和实现。 五、优化与扩展 1. 动画效果:添加方块下落、...

    Javascript-Gobang.zip

    这款小游戏不仅展示了JavaScript在交互式网页开发中的应用,还涉及到了基本的HTML和CSS布局,以及AI算法的实现。 首先,`index.css`文件是样式表,用于定义游戏界面的布局和视觉效果。在CSS(层叠样式表)中,...

    编程游戏腹泻生物-myrover.rar

    % 控制程序的优劣参见自己的测试结果. % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 背景说明: % 该游戏的灵感来自于很久之前我玩过的一个游戏以及 % matlab一个叫“Mars Surveyor...

    经典算法(html格式拼接)

    8. 排序算法:包括冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等,它们各有优劣,根据不同的数据特性选择合适的排序算法至关重要。 9. 字符串匹配算法:如KMP算法、Boyer-Moore算法,用于在一个文本...

    网页版人机交互五子棋

    网页版人机交互五子棋是一款基于JavaScript编程语言和HTML5技术实现的在线游戏。它充分利用了HTML5的canvas元素,这是一个用于在网页上绘制图形的动态画布,允许开发者直接在网页上进行像素级别的操作,创建出丰富的...

    cocos2dx框架分享

    最后,Cocos2dx的介绍中还提到了一些其他的游戏开发框架,如Unity3D、Adobe Air等,对这些框架的优劣进行了比较,并提出了为什么Cocos2dx是目前最靠谱的选择。其中一个重要的原因是,Unity3D虽然是强大的游戏开发...

Global site tag (gtag.js) - Google Analytics