简介
- HTML5游戏的跨平台性大家都了解:一次开发,多平台运行,节省了开发时间。可是现在移动平台上的HTML5游戏几乎是凤毛麟角,至少我在平时的工作以及生活中,很少看到周围的人用手机或者是平板玩HTML5的游戏。用户黏性太差、依赖于网络浏览器,这都是HTML5游戏的致命弱点——如果FireFox的B2G手机出来后可能会好一点点。
- PhoneGap是Adobe收购的一个项目,目的主要是使开发者能够使用Html+Css+JS来开发本地应用程序。按照我的理解就是:用web前端的技术写出一个个网页后,使用PhoneGap将这些网页封装成本地应用程序的一个个场景页面。这样原本在浏览器中运行的一个网站或者说是系统,就可以包装成一个本地的App,提交到Android Market 或者是Apple AppStore。
封装
- PhoneGap的本质就是封装了一个网页(webview),给webView包上一个外壳,提供一些webView的设定接口(如scale、orientation、whitelist等);同时提供一些JS接口,用来访问本地硬件资源(Camera,GPS等)。包装了一个本地App的外壳、提供访问硬件设备的接口,这就是PhoneGap的主要工作。
-
利用PhoneGap的这些性质,将HTML5游戏包装成一个本地App,理论上并不存在什么问题。但由于PhoneGap具备跨平台(7个移动平台)的特性,所以性能必然会受到影响。如果是一般的游戏,每个场景中的Sprite数量以及逻辑计算要求不是特别高的话,使用PhoneGap来进行封装完全不是问题——使用一份代码可以同时生成七个平台的安装包,这是非常诱人的一点。所以移植肯定能够成功,但移植之后的效果却看具体的游戏而定。使用PhoneGap 封装HTML5游戏的流程比较简单,很容易上手。由于我只在Mac 系统上进行过封装,所以这里只是说明一下在Mac OS上进行封装的步骤。个人感觉与在Windows下进行封装应该没什么差别。
- 安装PhoneGap,使用Terminal或者是xCode中的项目模板创建一个PhoneGap项目,官方网站上有相应的Devepoper Guides;在项目的www文件夹中,index.html是整个应用程序的入口,PhoneGap会默认加载该页面。
- 项目下有两个plist文件,里面主要是对当前应用程序的一些设置项,如应用程序权限,支持设备转向,允许打开的链接(whitelist)以及链接打开方式等等。
-
接下来我们要做的事就是把我们的游戏代码以及资源等都放到www文件夹下(放到www文件夹外部的文件在打包到特定平台时会被自动忽略),将游戏的启动页面更名为index.html即可。当然,代码中的资源路径等问题需要看情况进行修改。
调试生成
- 调试有两种方式:一种是使用weinre本地对PhoneGap程序进行调试(这儿有大牛写的安装使用教程),另外一种是使用PhoneGap的云端调试。前者调试比较方便,但是需要配置调试环境;后者使用非常简单,仅仅是粘贴一行代码,打开一个调试网页就可以了,但是调试的服务器是在国外,天朝的网速可能有些吃力。
- PhoneGap的调试问题目前还不是很完美,无法支持对JavaScript进行调试(使用weinre本地调试以及云端调试都不可以)。可以使用Chrome或者是FireFox对游戏进行调试,等游戏调试正常之后再进行移植。
- 生成安装文件也是比较简单,使用xCode直接就可以;官方网站上有云编译的服务,免费/收费都有,可以尝试一下免费Plan,试着用一份代码获取七个平台的游戏安装程序,很有成就感。
结语
- 使用PhonaGap进行移植其实非常简单,但是网上几乎找不到相关的文章。聊聊几篇所谓的教程也是食之无味,弃之可惜,导致我前前后后折腾了很久。在安装PhoneGap以及weinre的时候也是可能出现一些莫名其妙的问题。但总的来说,PhoneGap还是提供了非常多的便利,对于web前端开发人员以及html5游戏开发人员都是一个极大的帮助。
- 在cocos2d-html5的论坛上,有人问使用PhoneGap对cocos2d-html5的游戏进行封装是否可行——完全可行,我曾经成功移植过三个cocos2d-html5的游戏,但主要问题还是在效率上:一般的小游戏没问题,60FPS完全可以跑起来;复杂的游戏就要看游戏资源以及游戏中的优化了。
- 对PhoneGap的了解,我也不是特别深入,这里只是把我的一些心得、看法分享一下,免得后来者又像我一样白白的浪费很多时间。
- 一己之见,希望大家多多交流。