当前位置:  开发笔记 > 编程语言 > 正文

开发HTML5跨平台游戏相关经验

我们刚成立Gamezee的时候,行业中许多人都对HTML5抱有成见,就算是一些对其较为乐观的人士也只是说,HTML5将是未来发展潮流,但目前还不够成熟和稳定,无法制作出当前主导社交游戏领域的Ville类型Flash游戏。当时...">

 

我们刚成立Gamezee的时候,行业中许多人都对HTML5抱有成见,就算是一些对其较为乐观的人士也只是说,HTML5将是未来发展潮流,但目前还不够成熟和稳定,无法制作出当前主导社交游戏领域的Ville类型Flash游戏。

当时我们准备使用HTML5制作一款可同时运行于PC端的Facebook,以及所有iOS设备和Android手机平台移动网络的大型等视距游戏。

这款出自单个团队之手,并且基于HTML5/node.JS的游戏《Skyscraper City》仅运行一个代码库,它是我们这家工作室的开山之作。

《Skyscraper City》这款城建游戏现在已经入驻Facebook及iOS、Android手机平台,结合了社交建设玩法,含有乐高积木风格的元素。玩家可以堆叠任何一种城市单位以建设高塔,或者装饰建筑等。

开发这款游戏并非易事,以下是我们所总结的一些经验:

 

 

\

 

allisons_city(from gamasutra)


 

1)移动设备的玩家数量多于我们的预期。

我们想制作跨平台HTML5游戏的原因之一就是,我们自己也是游戏玩家。我玩过《CityVille》,并希望外出时也能在手机上玩到这款游戏。Zynga虽然推出移动版《CityVille Hometown》,我也可以在iPhone或Android手机下载这款游戏,但它与原版《CityVille》并不相同,它是另一座城市。而我们的游戏却能提供真正的跨平台体验,你可以在PC电脑、平板电脑、移动设备上玩游戏,并且实现游戏进程在所有设备上的同步。

我们认为多数用户的想法也是如此——他们多数时候在电脑上玩游戏,然后在其他场所时就拿出平板电脑或手机继续体验游戏。但在iPid Touch或iPad上玩游戏的用户要多于在Mac平台,而Android手机游戏玩家又会多于这些苹果游戏用户。

如果我们一开始就清楚这一点,就会花更多时间针对移动设备而非Mac浏览器优化游戏体验。虽然我们设计之初就考虑到移动设备,但我们却只是将其视为次级游戏环境。我们建议其他开发者将优质的手机游戏体验作为首要考虑目标。

2)必须进行多次试验。

我们一开始就有使用Canvas渲染游戏的念头。这在桌面电脑平台上十分管用——完全不存在运行效果的问题。但在iPhone 3GS平台,运行效果很糟糕(我们制作游戏时的每秒渲染画面不足5帧,但iOS 5.0发布之后情况大有好转)。

所以我们只好接二连三地创建一个又一个渲染引擎,直到创建出目前使用的DOM渲染器为止(它适用于多数设备)。这个DOM渲染器使用CSS动画,支持我们在2D图像上使用伪3D CSS变换以触发移动设备上的硬件加速功能(这可以略微提升运行效果)。

3)HTML5仍存在一些难以攻克的软肋。

HTML5上的音效仍然很有问题。游戏开发需考虑的是植入多种声音以响应游戏提示信息及玩家输入操作。但尽管我们进行了多次试验,仍然无法在多数移动设备上实现较理想的音效(游戏邦注:例如,无法让声音即时响应游戏内容或玩家操作),也难以让游戏同时播放响声和音乐。所以我们就选择在电脑版本的游戏中同时保留声音及音乐内容,但移动网页版本仅保留音乐。

在DOM上提升运行效果的一个类似做法是在CSS上进行伪3D变换。这可以在多数移动设备上触发硬件加速,使其获得比Canvas更出色的运行效果

出于某种原因,有些Android设备(例如三星Galaxy S21)并不支持这种操作,所以你无法针对它们提升游戏运行性能。

以下是我们用来触发3D变换的代码:


  1. 		/******************************/  
  2.  
  3. /* Makes screen non-selectable and prevents text cursor from displaying */  
  4.  
  5. /******************************/  
  6.  
  7. div {  
  8.  
  9. margin: 0;  
  10.  
  11. padding: 0;  
  12.  
  13. -moz-user-select: -moz-none;  
  14.  
  15. -khtml-user-select: none;  
  16.  
  17. -webkit-user-select: none;  
  18.  
  19. /*3D transform */  
  20.  
  21. -webkit-transform: scale3d(1, 1, 1);  
  22.  
  23. -o-user-select: none;  
  24.  
  25. user-select: none;  
  26.  
  27. }  
  28.  

4)在设计之初就要有跨平台理念。

我们希望手机版本与电脑网页版本的游戏体验更为相近,这意味着我们需要关闭手机版中的缩放功能,在网页版游戏中移除道具拾取的翻转效果,并想法在手机版游戏中植入翻转(我们的想法是通过一个按扭激活或使用手指按压目标道具来实现这一点)。

像《CityVille》这类游戏设计如果不进行重大调整,根本就不适用于手机平台,因为它一开始就并非瞄准移动设备。它的菜单太大太复杂了,游戏中的东西多得无法在小小的iPhone屏幕中呈现(游戏邦注:所以Zynga才需要针对iOS、Android发布独立版本的《CityVille Hometown》,而非添加一些元素直接将原版游戏移植到手机平台)。

 

 

\

 

gifts(from gamasutra)

5)不要采用大量堆叠操作。

我们游戏的一大特色就是上文提到的堆叠操作。在城市中创建一个巨型机器人或者建设一个由四根细柱支撑的倒金字塔确实很有趣,但在手机平台上的堆叠操作却问题百出。如果用户的手指不够纤细,有时候就难以准确选中他们想点击的物品。另外,与Flash一样,如果你在屏幕上拖动的对象越多,渲染时间就会越长。

玩家在这款游戏中一开始拥有10 X 10的城市方格,最高可以建设11层楼。如果每一格都建设这么高的楼,那需要渲染的建筑内容就多了(如果玩家的可玩区域扩展4倍后,那么渲染的工作量就更大了)。

所以,虽然堆叠很好玩,但对于扩建后的城市来说却十分不利于玩家操作,它会延长游戏的加载时间(在某些移动设备上的加载时间超过一分钟,在桌面电脑就没有这么明显)。我们现在正在优化游戏渲染大量对象的运行性能,但如果我们提前知道这一点,可能就会不会采用这种棘手的堆叠玩法了。

 

 

\

 

Skyscraper City(from gamasutra)

6)善于运用CSS知识

你最好很擅长CSS技术,因为让游戏在桌面电脑平台、Android手机及所有iOS设备的主流浏览器流畅运行,需要用到大量的CSS知识。我们有一个网页开发者的任务就是处理与CSS相关的工作,针对多种移动设备创建可动态变换尺寸的菜单。在电子游戏设计中,有50%的工作用于创建菜单。而HTML5跨平台游戏开发中有50%属于与CSS相关的工作。

以下是我们在这个开发过程中的一些体会:

我们的实践证明,开发者可以使用HTML5制作出很棒的跨平台等视距游戏。

如果玩家可以在一个设备上玩某款游戏,多数人就会想在手机或平板电脑上继续体验该游戏。

制作HTML5跨平台游戏需进行大量试验。

虽然HTML5很强大,但仍有一些不甚完善之处。

跨平台游戏体验意味着,游戏设计之初就要考虑到用户在不同设备上的体验。

不可在手机游戏中植入需进行大量堆叠或过度拖动的操作。

最好很精通CSS技能。

以下是我们在Facebook平台开发跨平台HTML5游戏的一些极有帮助的参考资料:

1)viewporter. https://github.com/zynga/viewporter. 这个Zynga开源代码允许你获取任何设备的屏幕尺寸,并针对这些屏幕调整游戏大小。它比你自己从头编写代码更省时间(我们用过Viewporter,也自己写过代码,所以才会知道这一点。)

2)Weinre.http://phonegap.github.com/weinre/. 这个远程调试器工作原理类似于Web Inspector,但它运行于移动设备。它有助于追踪iPhone和iPad等设备上的控制台错误信息。

3)JQuery. http://jquery.com/ 你可以利用这个库中现成的代码,省下自己写代码的时间。它对文本动画处理极有用处,我们进行了一些修改并推出了JQuery Mobile,它更适用于移动设备平台。

4)node.JS. http://nodejs.org/ 在你使用Javascript编写内容时,它可以让你省时省力地使客户端代码及服务器相适配。在作为游戏服务器时,node.JS的扩展性能也十分理想。


推荐阅读
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 当前物联网领域十大核心技术解析:涵盖哪些关键技术?
    经过近十年的技术革新,物联网已悄然渗透到日常生活中,对社会产生了深远影响。本文将详细解析当前物联网领域的十大核心关键技术,包括但不限于:1. 军事物联网技术,该技术通过先进的感知设备实现战场环境的实时监测与数据传输,提升作战效能和决策效率。其他关键技术还包括传感器网络、边缘计算、大数据分析等,这些技术共同推动了物联网的快速发展和广泛应用。 ... [详细]
  • $apply() 方法允许从 AngularJS 框架外部触发表达式的执行,确保其在 AngularJS 的上下文中运行。例如,当你使用 `setTimeout()` 或者集成第三方库时,可以通过调用 `$apply()` 来确保事件更新能够被 AngularJS 检测到并触发脏检查机制,从而实现数据的双向绑定。这一过程不仅保证了数据的一致性,还提升了应用的响应速度和用户体验。 ... [详细]
  • 本文旨在构建一个JavaScript函数,用于对用户输入的电子邮件地址和密码进行有效性验证。该函数将确保输入符合标准格式,并检查密码强度,以提升用户账户的安全性。通过集成正则表达式和条件判断语句,该方法能够有效防止常见的输入错误,同时提供即时反馈,改善用户体验。 ... [详细]
author-avatar
大姑氵娘祖茉茉_749
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有