最近本身趁业余时间作的flash小游戏已经开发得差很少了,准备再完善下ui及数值后,投放到国外flash游戏站。期间也萌生想法,想把游戏拓展到手机平台。这两天尝试了下,除去要接入ane接口的工做,小游戏自己不用作任何改动就能够迁移到android和ios手机平台。只是在手机上,游戏的掉帧状况很是严重,远达不到pc上的体验效果。看来作flash移动游戏,不用starling框架是不行的。打算这几天学习下starling,对项目进行改造。android
基于Starling移动项目开发准备工做ios
转自: Starling中文站 - Starling移动开发教程git
做者: 郭少瑞(NeoGuo)github
如今移动开发可谓热火朝天,若是您是一位Flash开发者,或许您所在的团队,已经开始基于Flash内容的移动应用开发了。因为Adobe已经提供了AIR打包技术,来帮咱们把同一份程序打包到iOS,Android,BlackBerry等系统或设备,这在很大程度上下降了跨平台的研发成本,也为传统的Flash研发团队进入移动开发领域提供了很好的机会。可是有机遇,也有麻烦。其中一个比较大的麻烦就是性能问题。如今的PC平台都有很强大的计算能力,咱们基于Flash的应用开发,通常不太关心性能问题,但进入移动设备,咱们会发现本身面临的硬件环境至关苛刻(固然如今的智能机硬件配置已经大大改善,让咱们开发上的限制已经宽松了许多)。好比咱们基于传统思路,用Flash电影剪辑等方式作了一个应用,在PC上预览没有问题,但在移动设备上却不能很好的执行(出现丢帧现象,这是显示渲染的压力太大所致)。为何会出现这种状况?由于Flash中传统的显示列表机制(Stage,Sprite,MovieClip),都是依赖CPU的,也就是说渲染压力基本都在CPU上。在移动设备上CPU处理能力低下的状况下,出现丢帧的现象也就不足为奇了。编程
能改善这种状况的一种方式就是利用GPU加速,也就是利用显卡在图形方面的计算能力,减轻CPU在屏幕渲染上的压力。但悲剧的是,Adobe在“为传统的显示列表机制提供GPU加速”这个工做上进展缓慢,以前曾推出了在配置文件中增长<renderMode>GPU</renderMode>的设置来开启硬件加速,但不要激动,这个设置对于PC无效,对于移动设备也是限制多多,并且并不稳定。笔者曾经在一个项目中分别设置CPU和GPU模式来测试程序(iPad 1),发现CPU模式反而运行效率更好且稳定。出现这样的状况至关让人沮丧,Adobe的技术团队也专门写过一篇Blog来解释其中的难度之大:Flash在以前的架构设计上彻底是基于于CPU的(一般咱们称之为软解),也就是说传统的2D显示列表就是为CPU渲染设计的,这对于跨平台来讲很是有效,但如今要迁移到GPU上就很是麻烦了。网络
这对咱们来讲,就意味着若是咱们以前有一个复杂的,基于Flash传统显示列表的应用或游戏,想要原封不动的移植到智能设备上,并且还要保证和PC类似的执行效率,仍是挺困难的。固然Flash盛行了这么多年,开发者也积累了不少行之有效的经验,来提高运行效率(好比基于Bitmap的动画实现,以空间换时间),这些经验能够帮助咱们在必定程度上改善现有应用的执行效率。但可能还不够,移动设备的特性决定咱们须要尽量的将优化作到极致。要作到这一点,咱们必须更有效的利用GPU。固然Adobe也意识到GPU对于提高渲染性能的重要性,因此推出了Stage3D。Stage3D虽然也作了抽象(解决平台无关性),但无疑是和硬件更接近的,基于Stage3D咱们能够开发和桌面游戏相媲美的网络3D游戏。固然由于Stage3D是偏底层的API,学习和掌握的成本也高一些。关于Stage3D本文不作过多介绍,若是您还不了解Stage3D,建议参考下面的文章:架构
固然正如其名,Stage3D是面向3D应用的API。若是咱们只是想作2D应用,是否是就不能使用Stage3D了呢?固然也是能够的,但编程和实现思路将和咱们以前的Flash经验大不相同,咱们须要彻底站在显卡的角度去编写实现过程,这无疑将是枯燥并且困难的,并且有很高的学习成本。所幸的是,一些具有探索和分享精神的技术达人,在Stage3D的基础上作了进一步的封装,以更接近传统Flash 2D显示对象的机制,来提供对传统Flash开发者更加友好的技术框架。这样的框架已经存在一些,比较知名的有Starling,ND2D等等。其中Starling获得Adobe官方的推荐,其接口也和Flash原有显示对象很是接近,因此笔者也选择了Starling来进行项目实践,并和你们分享这个过程当中的经验。app
Starling是由Gamua团队推出和维护的一个基于Stage3D的2D框架。这是一个位于奥地利的团队,有两位核心开发成员:Daniel Sperl和Holger Weissb ck。他们擅长Objective C和ActionScript,也正是由于这样,他们实际上有两个开源框架:Starling Framework和Sparrow Framework,两个框架的设计思想是同样的,只是前者面向Flash,后者面向iOS。框架
工欲善其事,必先利其器,让咱们先把“武器”准备好。这里的武器是指咱们的IDE,考虑到大多数Flash开发者应该都是基于Flash Builder进行编程的(Flash Professional实在不适合编程,其它第三方IDE好比Flash Develop,固然也很优秀,但为了文章简练起见,再也不涉及其它IDE了,若是您使用其它IDE,请参考IDE的帮助,整合最新的AIR SDK便可),咱们就以Flash Builder为准,来介绍后面的操做步骤。性能
请安装最新的Flash Builder 4.6,这个版本已经支持移动项目建立,而且包含了最新的Flex SDK 4.6(PS:咱们后面的讨论里不包括Flex框架或Flex项目,只是在Flash Builder中任何类型的项目都是依赖Flex SDK来编译的),可是内置的Flex SDK 4.6包含的是AIR 3.1的SDK,而对于移动设备的Stage3D支持则是在AIR 3.2中实现的。因此这个地方咱们要作一下调整,替换Flex SDK中的AIR的部分。
操做步骤:
而后咱们须要下载Starling。固然跟全部的ActionScript类库同样,咱们可使用它编译后的SWC,也可使用它的源码。这里笔者建议你们尽可能使用源码,由于做为一个新生框架,Bug是不可避免的,一旦有问题,咱们能够追踪源码来发现和解决。若是用SWC就没有这个便利了。
目前Starling官网( ),提供的稳定下载版本是1.0,从这里下载。而后还有一个正在开发的版本,在github托管,地址:经测试发现,目前Github上的版本也比较稳定,并且Demo里带了一个iOS的实例,若是您作移动开发,能够尝试用github上的最新代码版本。
下载源码后,能够经过Flash Builder建立一个库项目,包含Starling的源码,Flash Builder会自动将代码编译SWC。而后您能够建立一个ActionScript手机项目,在构建路径->库路径这个界面上,引用刚才建立的库项目便可。
刚才也说到,源码中是附带了例子的,若是您下载的是github上的源码,里面还有一个专门的iOS的例子。若是您已经具有了Flash开发经验,那么看这个例子无疑是快速了解Starling使用方式的最佳途径。
请遵循下面的步骤启动这个例子
若是您想在真实设备测试,就要分状况而言:若是是Android设备,比较简单,经过自建证书打包为APK,安装到Android设备便可;若是是iPhone或iPad ,就麻烦一些,您须要一个苹果承认的签名证书才能完成打包,这个证书须要注册苹果开发者帐号并付费才能获取,具体过程参见James Li的教程,这里再也不细述。
今天就到这里,后面我会继续和你们探讨使用Starling过程当中的一些问题和经验。