Starling是啥。打开Flash builder首页面,中间那么大一个图标,那么醒目的小鸟,见怪不怪了。Starling 是啥,网上这么说的:Starling是一个纯粹的ActionScript3类库。它在GPU的基础上重构了Flash的显示列表(GPU可以为移动平台的应用程序提供更好的呈现能力,如ios和Android平台)。
因为Starling是一个完全基于ActionScript3的类库,所以学习Starling需要您掌握ActionScript3的基础知识。如果您暂时还不具备这方面的知识,您完全不需要为此而担心!只要您拥有面向对象编程语言的基础,相信我,您会很快掌握AS3!而且,值得庆幸的是,有许许多多这方面的书可以帮助您。
除了语言,这份文档几乎不需要您掌握其他任何关于Flash的知识(至少,这是我的设想)。这将从如何在您的IDE中创建一个Starling工程开始入手;然后,这份文档将会向您阐述Starling的显示树和事件系统是如何工作的;继而,将向您展示如何使用Starling完成特定工作,如:动画对象的实现等。最后一章则包含一些关于Starling高级用户需要的信息,如:如何编写自定义渲染方法。
这里是Starling中文站,里边有很多想学Starling,想了解Staring的知识与消息:Starling 中文站
其实,Starling是啥,我也不知道。虽然听多了,见多了。还是要自己动手做做吧。
首先,下载Starling包:点击下载Starling包。解压之后,里边包含有一些demo以及starling包。
基本开发环境,开发工具:Flash builder ,Flash cs6(Flash CC 也可以用)。其他工具,我也没用过。Flash IDE 方便,直接,下边直接新建第一个demo:
文档类: Main.as
package com.vini123 { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import starling.core.Starling; import com.vini123.GameRole; public class Main extends Sprite { private var _starling:Starling; public function Main():void { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; _starling = new Starling(GameRole , stage); _starling.start(); } } }
GameRole类: GameRole.as
package com.vini123 { import starling.text.TextField; import starling.display.Sprite; public class GameRole extends Sprite { private var _txt:TextField; public function GameRole():void { _txt = new TextField(250,180,"This is my first Starling!"); addChild(_txt); } } }
就算这么简单的几句代码,编译的时候,不见得那么顺利。下边分情况说下可能会遇到的情况(这里用的IDE是Flash CS6.0 , 如果是Flash Builder可能不会遇到)
第一种情况:
如果你建立的是AIR项目,运行上边的代码,可能会在编译好的swf显示出这样一段文字:Context3D not available! Possible reasons: wrong renderMode or missing device support.如下图:
renderMode — 指定运行时应使用图形处理单元 (GPU) 还是主要的中心处理单元 (CPU) 渲染应用程序。通常,GPU 渲染可以提高渲染速度,但某些功能(例如某些混合模式和 PixelBender 筛选器)在 GPU 模式下无法使用。此外,不同设备和不同设备驱动程序的 GPU 功能和限制是不同的。应始终在尽可能多的设备上测试应用程序,特别是使用 GPU 模式时。
可以将渲染模式设置为 gpu、cpu、direct 或 auto。 默认值是 auto,该设置目前回退到 cpu 模式。
注: 为了利用具有移动平台 AIR Flash 内容的 GPU 加速,Adobe 建议使用 renderMode=”direct”(即 Stage3D),而不是 renderMode=”gpu”。Adobe 官方支持和建议以下基于 Stage3D 的框架:Starling (2D) 和 Away3D (3D)。有关 Stage3D 和 Starling/Away3D 的更多细节,请参阅http://gaming.adobe.com/getstarted/。
这个时候,将配置的 app.xml中的 “auto” 改成 direct.这样就ok了。
第二种情况,假如不知道GameRole 是啥,假如GameRole.as这样写:
package com.vini123 { import flash.text.TextField; import flash.display.Sprite; public class GameRole extends Sprite { private var _txt:TextField; public function GameRole():void { _txt = new TextField(); addChild(_txt); _txt.text = "This is my first Starling!" } } }
编译时,会出现下边的错误:
[Starling] Initialization complete.
[Starling] Display Driver: DirectX9 (Baseline Constrained)
Error: Invalid root class: [class GameRole]
at starling.core::Starling/initializeRoot()[C:\Users\zhou\Desktop\FIRST\1\starling\core\Starling.as:355]
at starling.core::Starling/initialize()[C:\Users\zhou\Desktop\FIRST\1\starling\core\Starling.as:330]
at starling.core::Starling/onContextCreated()[C:\Users\zhou\Desktop\FIRST\1\starling\core\Starling.as:561]
这是啥,这是为啥呀。构造方法中的”GameRole”参数,是一个Starling的显示对象。这是您进入GPU加速世界的通道: Starling有它自己的一套显示对象。在使用方式上,它们和传统的显示对象几乎完全一致,但实际上,它们使用Stage3D在屏幕上呈现内容。
这样,使得看紧点命名空间。
前边说到的renderMode,不仅在app.xml配置文件中,需要配置,在html中同样需要配置:
当您通过浏览器来测试SWF的时候,您需要确保通过额外的参数开启了Stage3D渲染。同样如果是AIR项目需要确保在配置XML中做了正确设置。
HTML: 在object 标签, 添加
HTML: 在embed 标签, 添加 wmode=’direct’
AIR: 在配置文件中改变渲染模式: direct
其实,这个问题,在之前做away3d的时候,就遇到了。因为在html中没有将wmode设置成direct,导致建立的away3d渲染不出来了。
路慢慢其修远兮。