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);
        }
    }
}

编译后的画面:
Starling运行完好的画面

就算这么简单的几句代码,编译的时候,不见得那么顺利。下边分情况说下可能会遇到的情况(这里用的IDE是Flash CS6.0 , 如果是Flash Builder可能不会遇到)

第一种情况:

如果你建立的是AIR项目,运行上边的代码,可能会在编译好的swf显示出这样一段文字:Context3D not available! Possible reasons: wrong renderMode or missing device support.如下图:

 

Starling 文本错误

 

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渲染不出来了。
路慢慢其修远兮。