[转]基于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过程中的一些问题和经验。

转载于:https://www.cnblogs.com/leoin2012/p/4478017.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言float输出分数,c语言同一题目求解结果用float和int输出值差1.

c语言同一题目求解结果用float和int输出值差1.答案:3 信息版本&#xff1a;手机版解决时间 2018-12-08 22:35已解决2018-12-08 05:38c语言同一题目求解结果用float和int输出值差1.最佳答案2018-12-08 06:01试试这样就好了#include main(){long i;float j,j1,j2,j4,j6,j10;j110…

《构建之法》阅读笔记02

今天我阅读了《构建之法》4-6章。有许多的感悟。 以前编程序总喜欢乱命名变量&#xff0c;觉得自己看的懂就行了。但读完构建之法第四章。我知道了程序是给别人看的&#xff0c;然后那只是程序比较简单而已。如果一个程序过于庞大&#xff0c;而变量的命名有没有实际的意义&…

2017-10-03 前端日报

2017-10-03 前端日报 精选 你需要知道的几类npm依赖包管理看Zepto如何实现增删改查DOM把cookie聊清楚6 Pro Tips from React DevelopersMulti-user experiences with A-Frameclintonwoo/hackernews-react-graphql: Hacker News clone rewritten with universal JavaScript, usi…

【朴灵评注】JavaScript 运行机制详解:再谈Event Loop

PS: 我先旁观下大师们的讨论&#xff0c;得多看书了~别人说的&#xff1a;“看了一下不觉得评注对到哪里去&#xff0c;只有吹毛求疵之感。 比如同步异步介绍&#xff0c;本来就无大错&#xff1b;比如node图里面的OS operation&#xff0c;推敲一下就可以猜到那是指同步操作&a…

c语言 strcpy原型,浅谈C语言中strcpy,strcmp,strlen,strcat函数原型

实例如下&#xff1a;//strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的\0)并添加\0char *strcat(char * strDest, const char *strSrc){char *resstrDest;assert((strDest!NULL)&&(strSrc!NULL));while(*strDest)strDest;while(*strDest*strSrc){s…

angular——更多按钮的上拉菜单(路由跳转)

<button class"btn gray_text_btn list_item" ng-click"action.toMoreOptions()"><i class"icon ion-navicon"></i> </button> <!-------------------- 底部按钮 -----------------------><section class&qu…

Python版——博客网站四 编写日志创建页

2019独角兽企业重金招聘Python工程师标准>>> 开源地址&#xff1a;https://github.com/leebingbin/Python3.WebAPP.Blog 单从编码来说&#xff0c;WebApp开发真正困难的地方在于编写前端页面。前端页面需要混合HTML、CSS和JavaScript&#xff0c;如果对这三者没有深…

c语言0-1匀分布随机数,C++ generate_canonical均匀分布随机数函数用法详解

标准均匀分布是一个在范围 [0&#xff0c;1) 内的连续分布。generate_canonical() 函数模板会提供一个浮点值范围在 [0&#xff0c;1) 内&#xff0c;且有给定的随机比特数的标准均匀分布。它有 3 个模板参数&#xff1a;浮点类型、尾数的随机比特的个数&#xff0c;以及使用的…

第三十四天 how can I 坚持

“不要把所有的鸡蛋放在同一个篮子里”是错误的&#xff0c;投资应该像马克吐温说的那样&#xff0c;要把所有的鸡蛋放在同一篮子里&#xff0c;并小心的看好他。---巴菲特。 那盆花还没死&#xff0c;但是我又能做什么呢&#xff1f;技术。永远的技术。睡觉。转载于:https://w…

01-Swift 介绍

简介 Swift 语言由苹果公司在 2014 年推出&#xff0c;用来撰写 OS X 和 iOS 应用程序2014 年&#xff0c;在 Apple WWDC 发布 几家欢喜,几家愁愁者:只学Object-C的人欢喜者:之前做过java/python/js语言的人历史 2010 年 7 月&#xff0c;苹果开发者工具部门总监 Chris Lattner…

2017—2018 实验报告:实验一

实验一&#xff1a;实验报告 课程&#xff1a;程序设计与数据结构 班级&#xff1a; 1623 姓名&#xff1a; 张旭升 学号&#xff1a;20162329 指导教师&#xff1a;娄嘉鹏 王志强 实验日期&#xff1a;9月25日 实验密级&#xff1a; 非密级 预习程度&#xff1a; 已预习 必修/…

病床呼叫系统有显示屏c语言,病床呼叫系统毕业设计

内容介绍完整版大学病床呼叫系统毕业设计&#xff0c;已修改完格式摘 要医院已经从人工管理模式向智能化方向发展。“病床呼叫系统”可以实现对病房的智能化管理&#xff0c;可实现呼叫、求救警报、信息存储、显示等等功能。患者在住院期间&#xff0c;可能会在任意时间请求医…

1. mybatis批量插入数据

通过list <insert id"saveByList" useGeneratedKeys"true" parameterType"java.util.List"> insert into T_App_Default_User(UserID,AppType,CreateTime)values <foreach collection"list" item"item" index&quo…

iOS开发 - Swift实现清除缓存功能

前言: 开发移动应用时&#xff0c;请求网络资源是再常见不过的功能。如果每次都去请求&#xff0c;不但浪费时间&#xff0c;用户体验也会变差&#xff0c;所以移动应用都会做离线缓存处理&#xff0c;其中已图片缓存最为常见。 但是时间长了&#xff0c;离线缓存会占用大量的…

c语言结构体单元测试,C语言结构体单元练习.doc

C语言结构体单元练习1.有以下定义和语句&#xff1a;struct student{ int age;int num; };struct student stu[3]{{1001,20},{1002,19},{1003,21}};main(){ struct student *p;pstu;…… }则以下不正确的引用是 。A) (p)->num B) p C) (*p).num D) p&stu.age2.有以下结构…

如何开启IIS7以上的“IIS6管理兼容性”

护卫神PHP套件的安装&#xff0c;需要开启“IIS6管理兼容性”&#xff0c; 那么&#xff0c;如何开启IIS7、IIS7.5、IIS8.0的IIS6兼容模式呢&#xff1f; 设置的时候&#xff0c;请参照如下截图&#xff1a; 本文转自黄聪博客园博客&#xff0c;原文链接&#xff1a;http://www…

pop to 特定的UIViewController

1. 我们可以推出到特定的UIViewController 2. 有一个类没有navigationController&#xff0c;以前一般用delegate&#xff0c;我觉得我们可以把引用一个navigationController&#xff0c;然后使用它来推出另一个UIViewController转载于:https://www.cnblogs.com/studyNT/p/4486…

蓝桥杯:矩阵翻硬币

题目地址&#xff1a;http://lx.lanqiao.org/problem.page?gpidT126 这道题强烈建议用java做&#xff0c;毕竟自带BigInteger类。 此题看似是一道模拟题&#xff0c;但由于数据规模很大&#xff08;10的1000次方&#xff09;&#xff0c;只能找规律。规律是最终结果为sqrt(n)*…

ssh服务端口转发详解

端口转发的概念和应用什么是端口转发呢&#xff0c;我们知道&#xff0c;SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是&#xff0c;SSH 还同时提供了一个非常有用的功能&#xff0c;这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发&…

W ndoWs文件夹窗口,如何在本地网络中访问-Synology-NAS-上的文件-(Wndows).pdf

如何在本地网络中访问-Synology-NAS-上的文件-(Wndows)如何在本地网络中访问 Synology NAS 上的文件 (Windows)概述Synology NAS 经过专门设计&#xff0c;可快速简单地在本地网络中存储和共享文件&#xff0c;让您直接访问 SynologyNAS 上的文件而没有每次登录 DSM 的麻烦。例…