[转]基于Starling移动项目开发准备工作
最近自己趁业余时间做的flash小游戏已经开发得差不多了,准备再完善下ui及数值后,投放到国外flash游戏站。期间也萌生想法,想把游戏拓展到手机平台。这两天尝试了下,除去要接入ane接口的工作,小游戏本身不用做任何改动就可以迁移到android和ios手机平台。只是在手机上,游戏的掉帧情况非常严重,远达不到pc上的体验效果。看来做flash移动游戏,不用starling框架是不行的。打算这几天学习下starling,对项目进行改造。
基于Starling移动项目开发准备工作
转自: Starling中文站 - Starling移动开发教程
作者: 郭少瑞(NeoGuo)
现在移动开发可谓热火朝天,如果您是一位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 翻译系列之一: Stage3D是如何工作的(一)(概念篇)
- Stage3D 翻译系列之一: Stage3D是如何工作的(二)(深入篇)
- Stage3D 翻译系列之一: Stage3D是如何工作的(三)(完结篇)
当然正如其名,Stage3D是面向3D应用的API。如果我们只是想做2D应用,是不是就不能使用Stage3D了呢?当然也是可以的,但编程和实现思路将和我们之前的Flash经验大不相同,我们需要完全站在显卡的角度去编写实现过程,这无疑将是枯燥而且困难的,而且有很高的学习成本。所幸的是,一些具备探索和分享精神的技术达人,在Stage3D的基础上做了进一步的封装,以更接近传统Flash 2D显示对象的机制,来提供对传统Flash开发者更加友好的技术框架。这样的框架已经存在一些,比较知名的有Starling,ND2D等等。其中Starling得到Adobe官方的推荐,其接口也和Flash原有显示对象非常接近,所以笔者也选择了Starling来进行项目实践,并和大家分享这个过程中的经验。
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的部分。
操作步骤:
- 进入Flex SDK目录(Win下面是{您的安装路径}\Adobe Flash Builder 4.6\sdks\),您的最新版本应该是4.6,将4.6复制一份,命名为4.6_AIR3.2
- 从Adobe官方下载最新的AIR SDK,地址是:AIR SDK下载
- 下载后解压缩,覆盖4.6_AIR3.2
- 启动Flash Builder,打开窗口->首选项->Flash Builder->已安装的SDK,新建一个SDK配置,目录指向刚才创建的4.6_AIR3.2,并设置为默认SDK
- 新建一个ActionScript手机项目,观察主应用的XML配置文件的命名空间(比如主类是Main.as,那么配置文件是Main-app.xml),如果命名空间是,则代表配置成功
然后我们需要下载Starling。当然跟所有的ActionScript类库一样,我们可以使用它编译后的SWC,也可以使用它的源码。这里笔者建议大家尽量使用源码,因为作为一个新生框架,Bug是不可避免的,一旦有问题,我们可以追踪源码来发现和解决。如果用SWC就没有这个便利了。
目前Starling官网( ),提供的稳定下载版本是1.0,从这里下载。然后还有一个正在开发的版本,在github托管,地址:经测试发现,目前Github上的版本也比较稳定,而且Demo里带了一个iOS的实例,如果您做移动开发,可以尝试用github上的最新代码版本。
下载源码后,可以通过Flash Builder创建一个库项目,包含Starling的源码,Flash Builder会自动将代码编译SWC。然后您可以创建一个ActionScript手机项目,在构建路径->库路径这个界面上,引用刚才创建的库项目即可。
刚才也说到,源码中是附带了例子的,如果您下载的是github上的源码,里面还有一个专门的iOS的例子。如果您已经具备了Flash开发经验,那么看这个例子无疑是快速了解Starling使用方式的最佳途径。
请遵循下面的步骤启动这个例子
- samples目录实际上包含两个例子:demo和demo_ios,其中demo_ios需要依赖demo的资源,在后面的步骤中需要注意。
- 在Flash Builder中创建一个ActionScript手机项目,类型可以设定为iOS,平台为iPhone,然后引入上面创建的Starling库。
- 在源码设定部分,将demo/src和demo_ios/src两个目录全都设定进去,然后设置启动的Application为demo_ios/src/Startup_iOS.as。
- 如果没有提示编译错误,那就表示配置成功,可以用Flash Builder的模拟界面进行测试,可以看到如下的界面:
如果您想在真实设备测试,就要分情况而言:如果是Android设备,比较简单,通过自建证书打包为APK,安装到Android设备即可;如果是iPhone或iPad ,就麻烦一些,您需要一个苹果认可的签名证书才能完成打包,这个证书需要注册苹果开发者账号并付费才能获取,具体过程参见James Li的教程,这里不再细述。
今天就到这里,后面我会继续和大家探讨使用Starling过程中的一些问题和经验。
[转]基于Starling移动项目开发准备工作的更多相关文章
- 关于基于LinphoneSDK通话项目开发中遇到的相关问题
在之前小学期的项目开发当中,我们小组进行的是使用网上开源的LinphoneSDK来开发一款Android端的VOIP电话APP. 因为网上关于这个SDK在安卓端的开发文档相当少,所以我们只能根据少量的 ...
- 为什么要用hibernate 与基于数据库表结构的项目开发
最近开始学习hibernate,其实并不知道要学习什么,有什么用.后来问了一下同事,他就说快捷方便简单,很多事情不用自己做他会帮你做好,但是我觉得不应该是这样的,于是我就去搜了一下,就搜到了一篇帖子, ...
- Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课
Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课 本课程采用Q Q群直播方式进行直播,价值99元视频课程免费直播.完整的基于Swift项目实战,手把手教你做一个Swift版i ...
- Java系列--第七篇 基于Maven的Android开发实战项目
本篇是基于<Android应用案例开发大全,吴亚峰等著>的项目开发实例源码,其中有些图片,我做了一些修改,用于个人学习,请勿用于商业. 1, 日程管理专家 mvn archetype:ge ...
- 【课程分享】基于plusgantt的项目管理系统实战开发(Spring3+JDBC+RMI的架构、自己定义工作流)
基于plusgantt的项目管理系统实战开发(Spring3+JDBC+RMI的架构.自己定义工作流) 课程讲师:张弘 课程分类:Java 适合人群:中级 课时数量:37课时 用到技术:Spring ...
- 基于VS Code创建Spring Boot项目开发REST API(一)
公司从.NET转向Java不仅仅是简单的代码变成Java,趁此机会对原有的架构和代码重构,融入新的概念和技术.目前通过前后端分离,将后端更多的微服务化.从.NET转向Java我们更多的是用Java开发 ...
- 基于Vue、web3的以太坊项目开发及交易内幕初探 错误解决总结
基于Vue.web3的以太坊项目开发及交易内幕初探 本文通过宏观和微观两个层面窥探以太坊底层执行逻辑. 宏观层面描述创建并运行一个小型带钱包的发币APP的过程,微观层面是顺藤摸瓜从http api深入 ...
- SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
随机推荐
- git版本控制管理实践-4
vcs: version control system 版本控制系统 local vcs, 集中式版本控制系统: centralized vcs; 分布式vcs: distributed vcs Lo ...
- Backbone 学习笔记
Backbone 是一款基于模型-视图-控制器 MVC 模式的轻量级javascript 框架 ,可以用来帮助开发人员创建单页Web应用. 借助Backbone 我们可以使用REST的方式来最小化客户 ...
- 2015.4.23 贪吃蛇、canvas动画,各种上传工具,url信息匹配以及最全前端面试题等
1.面向对象贪吃蛇 2.css中:hover 改变图片 页面加载完 第一次鼠标移入会闪一下 这是为啥? 解决方法:你把两张图合成一张图或者是先把图片加载到页面上,然后再hover出来. 解析:图片 ...
- tyvj1098 任务安排
描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti.在每批任务开始前, ...
- R语言-用R眼看琅琊榜小说的正确姿势
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html 目录: 零:写在前面的一些废话 一.R眼看琅琊榜的基本原理 1.导入数据 2.筛选数据 3.多条 ...
- [Network] HTML、XML和JSON学习汇总
写在前面:楼主也是刚刚接触这方面的知识,之前完全是零基础,后来经朋友推荐了几个不错的博文,看完以后豁然开朗.但是此博文更加偏重于基础知识介绍(其实更深的楼主也还不了解,这方面的大神请绕道),只是分享个 ...
- C# 发送电子邮件
网上找到的发送邮件的类,改了一点点,在此谢谢原作者的奉献. 1.源码: public class CSendMail { private MailMessage mailMessage; privat ...
- C++ STL模板
C++中的STL(Standard Template Library)用起来挺方便的,这里我们来做一下总结. 一.set set是STL中一种标准关联容器 (vector,list,string,de ...
- Qt:正则表达式语法:
正则表达式是验证输入.从输入中提取数据以及对输入进行搜索和替换的强大工具,所谓正则表达式,regexp是一种利用模式匹配语言来描述字符串组成限制条件的方式; Qt 提供了一个Q ...
- yii中的cookie的发送和读取
cookies: //新创建的cookie会从本地传到服务器上,然后从服务器获取. (1) cookie的发送 $cookies = Yii::$app->response->cookie ...