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

开发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的扩展性能也十分理想。


推荐阅读
  • 近日,我在处理一个复杂的前端问题时遇到了极大困扰。具体来说,我之前开发了一个功能丰富的纯jQuery代码的前端GridView控件,实现了多种功能和视觉效果,并在多个项目中表现良好。然而,最近在尝试应用 `border-box` 布局模式时,却遇到了意想不到的兼容性和性能问题。这提醒我们在条件尚未完全成熟的情况下,应谨慎使用 `border-box` 布局模式,以免引入不必要的复杂性和潜在的bug。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 题目 E. DeadLee:思维导图与拓扑结构的深度解析问题描述:给定 n 种食物,每种食物的数量由 wi 表示。同时,有 m 位朋友,每位朋友喜欢两种特定的食物 x 和 y。目标是通过合理分配食物,使尽可能多的朋友感到满意。本文将通过思维导图和拓扑排序的方法,对这一问题进行深入分析和求解。 ... [详细]
  • 深入解析Linux内核中的进程上下文切换机制
    在现代操作系统中,进程作为核心概念之一,负责管理和分配系统资源,如CPU和内存。深入了解Linux内核中的进程上下文切换机制,需要首先明确进程与程序的区别。进程是一个动态的执行流,而程序则是静态的数据和指令集合。进程上下文切换涉及保存当前进程的状态信息,并加载下一个进程的状态,以实现多任务处理。这一过程不仅影响系统的性能,还关系到资源的有效利用。通过分析Linux内核中的具体实现,可以更好地理解其背后的原理和技术细节。 ... [详细]
  • 如何在PDF文档中添加新的文本内容?
    在处理PDF文件时,有时需要向其中添加新的文本内容。这是否可以直接实现呢?有哪些简便且免费的方法可供选择?使用极速PDF阅读器打开文档后,可以通过点击左上角的“注释”按钮切换到注释模式,并选择相应的工具进行编辑。此外,还可以利用其他功能丰富的PDF编辑软件,如Adobe Acrobat DC或Foxit PhantomPDF,它们提供了更多高级的编辑选项,能够满足更复杂的需求。 ... [详细]
  • 题目要求解决一个有趣的编程挑战,即计算由四个自然数 \( p, q, r, s \) 组成的分数序列的和。具体来说,需要编写一个 C# 程序来处理这些自然数,并通过特定的数学运算得出最终结果。该任务不仅考验编程技能,还涉及对数学公式的理解和应用。 ... [详细]
  • Nginx 反向代理配置与应用指南
    本文详细介绍了 Nginx 反向代理的配置与应用方法。首先,用户可以从官方下载页面(http://nginx.org/en/download.html)获取最新稳定版 Nginx,推荐使用 1.14.2 版本。下载并解压后,通过双击 `nginx.exe` 文件启动 Nginx 服务。文章进一步探讨了反向代理的基本原理及其在实际应用场景中的配置技巧,包括负载均衡、缓存管理和安全设置等,为用户提供了一套全面的实践指南。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 最新消息显示,苹果即将发布的新一代iOS系统可能将集成先进的3D地图功能。这一创新技术由C3 Technologies公司开发,曾在今年3月被TechCrunch报道。用户可以通过该功能获得更加真实和沉浸式的地图体验,包括详细的建筑物模型和街景视图。视频演示展示了其卓越的视觉效果和交互性。 ... [详细]
  • 如何撰写初级和高级前端开发者的专业简历
    如何撰写初级和高级前端开发者的专业简历 ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
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社区 版权所有