引进Starling(二)
作者的话:本系列为Starling的引进教程,原文《Introducing Starling - rev 1.2.6》。前两章系转帖,原文地址:http://www.adobe.com/cn/devnet/flashplayer/articles/introducing_Starling.html。从第三部分起,为本人独立翻译,争取一周内发表完成。 入门
你可以访问官方的 Github页面*下载Starling。 此外,你可能发现访问Starling 网站*也会受益匪浅。 Starling根据 Simplified BSD许可获得授权,所以你可以在任何类型的商业或者非商业项目上使用Starling。 如果你需要更多的信息,你可以联系Starling 框架团队。 在你下载Starling之后,你可以像引用其它AS3库一样引用Starling库。 为了使用Flash Player 11 beta的新版本,你必须把SWF版本13作为目标,这是通过将额外的编译器参数即
在你已经准备好了你的开发环境之后,你就可以深入研究相应的代码,并且看看你如何能够充分利用这一框架。 使用 Starling 非常简单,你只需创建一个 首先,Starling构造器(constructor)需要多重参数。 下面是签名: public function Starling(rootClass:Class,stage:flash.display.Stage,viewPort:Rectangle=null,stage3D:Stage3D=null,renderMode:String="auto")事实上,只有前面3个经常使用。 相关的 rootClass 参数需要一个至扩展
starling.display.Sprite 的类的引用,而第二个参数是我们的 stage,然后是一个 Stage3D 对象:
package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import starling.core.Starling; [SWF(width="1280",height="752",frameRate="60",backgroundColor="#002143")] public class Startup extends Sprite { private var mStarling:Starling; public function Startup() { // stats class for fps addChild ( new Stats() ); stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; // create our Starling instance mStarling = new Starling(Game,stage); // set anti-aliasing (higher is better quality but slower performance) mStarling.antiAliasing = 1; // start it! mStarling.start(); } } }在下面的代码中,Game类在被添加到 Stage 时可以创建一个简单的四边形: package { import starling.display.Quad; import starling.display.Sprite; import starling.events.Event; public class Game extends Sprite { private var q:Quad; public function Game() { addEventListener(Event.ADDED_TO_STAGE,onAdded); } private function onAdded ( e:Event ):void { q = new Quad(200,200); q.setVertexColor(0,0x000000); q.setVertexColor(1,0xAA0000); q.setVertexColor(2,0x00FF00); q.setVertexColor(3,0x0000FF); addChild ( q ); } } } 上述代码将一个侦听器添加到 Event.ADDED_TO_STAGE 事件中,并在事件处理程序中对应用程序进行初始化。 这样你就可以安全地访问 Stage。 注意: 关注一下这个微妙的细节:上面描述的 Game 类从 starling.display 程序包中,而不是从 flash.display 程序包中扩展了 Sprite 类。必须检查你的导入语句并确保你不是使用本地 API 来替代 Starling API。 正如在 Flash 中所预期的,Starling 中的对象有一个默认的位置0,0。因此添加几行命令使四边形位于 Stage 的中央: q.x = stage.stageWidth - q.width >> 1; q.y = stage.stageHeight - q.height >> 1;现在,测试一下项目以便于观察相应的结果(参见图8): 图8. 四边形位于Stage的中央 注意锯齿消除功能(anti-aliasing)值允许你设置锯齿消除功能所需的类型。 一般来说,值为1就基本上可以接受,但是你可以选择其它值。 该框架支持的锯齿消除功能(anti-aliasing)值的变化范围是0到16,但是,下面的列表给出了最常用的值:
你很少需要用到超过2的设置,尤其是对2D内容。 然而,根据你的项目要求,你需要针对具体情况作出相应的决定。 在图9中,比较一下两个截图,观察两个锯齿消除(anti-aliasing)值(1和4)之间的细微差别。 图9. 比较一下锯齿消除(anti-aliasing)值为1(左)和4(右)之间的视觉差别 试验一下使用2以上的值为你的项目设置所需的质量。 当然,选择较高的值会影响性能。 注意 Stage3D 不会受到 SWF 文件的 Stage 质量影响。 下面给出能够与 Starling 对象一起使用的其它 API 的描述:
一旦创建了你的 [Starling] Initialization complete. [Starling] Display Driver:OpenGL Vendor=NVIDIA Corporation Version=2.1 NVIDIA-7.2.9 Renderer=NVIDIA GeForce GT 330M OpenGL Engine GLSL=1.20 (Direct blitting) 当然,特定的硬件细节将会随着你的配置而变化。 上述信息表明已经使用了 GPU 加速功能,因为它包括驱动版本的细节。 为了便于调试,你可能希望能够强迫 Flash Player 内部使用的软件回退,以便了解当你的内容在软件上运行时它的表现如何。 添加如下的代码以便于通知 Starling 你希望使用软件回退功能(software rasterizer): mStarling = new Starling(Game,stage,null,Context3DRenderMode.SOFTWARE);当你使用软件时,输出的信息会确认你正在使用software 模式: [Starling] Initialization complete. [Starling] Display Driver:Software (Direct blitting) 确保你也在 software 模式下测试了你的内容,以便于更好地了解它在这种模式下的性能。 如果用户的配置使用旧版本的驱动(为了保持一致性,所有2009年之前的驱动都包含于黑名单中),那么你的内容可能回退到软件。 在下一节中,当你将你的 SWF 文件嵌入到页面时,你需要看一下 Stage3D 的要求。 Wmode 要求你必须记住为了启用Stage 3D 和 GPU 加速功能,在页面中你必须使用 下图列举了一个运行时异常的对话框: 图10. 在 Context3D不可用的情形下,运行时异常对话框 如果你的应用程序嵌入时使用了错误的wmode,那么必须小心处理这种情形。 你需要通过显示一条解释这一问题的信息以便给出合理的响应。 幸运的是,Starling为你自动地处理了这一问题并显示如下信息: 图11. 当应用程序没有正确嵌入时显示的警告 STAGE质量 作为一个Flash开发人员,stage质量的概念对你来说并不陌生。 记住当使用 Stage3D以及作为结果的Starling时,stage质量不会影响相应的性能。 渐进的增强功能 当GPU加速功能不起作用时,Stage3D将回退到软件中,并且将在内部使用一个名称为SwiftShader (Transgaming)的软件回退引擎。 为了保证你的内容在此种情形下运行正常,你需要检测什么时候你应该在software模式下运行,并且移除在software模式下可能会减慢运行速度的潜在影响。 在2D内容环境下,软件回退功能能够处理很多对象并提供良好的性能,但是,为了检测这一点,你仍然可以使用静态的属性环境从Starling对象中读取Context3D对象: // are we running hardware or software? var isHW:Boolean = Starling.context.driverInfo.toLowerCase().indexOf("software") == -1; 记住使用软件回退功能设计你的内容是一种很好的做法,它将提供一种渐进式的体验,从而确保在任何情形下都能获得最佳体验效果。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |