上边这个就是使用了Starling做成的。文章学习来源:Starling中文站

经过第一天,下边是第二天的。那么,一份帮助文档就很重要了。这里是下载地址:Starling 1.2 中文帮助文档
在Starling框架中,很多类都沿用的原始的模型。这样方便理解与使用。对于flash,显示列表是那么的重要。Starling框架中,显示列表的关系也和原始的类似。下边是Starling中文网上的关系图:

这里有两个抽象类:DisplayObject ,DisplayObjectContainer 。在这里,Image,MovieClip不再具有addChild方法了。所有,这样的重担就落在了DisplayObjectContainer的那些子类(Button,Sprite,Shape,TextField)上了。

下边说起了Starling的Image类,说起Staring的纹理。一个图片是映射了纹理的四边形。Image类相当于Flash的Bitmap版本,Starlings是用纹理来代替BitmapData来提供图像的像素资源。这个和Away3D一样,连创建方式都一样。要显示一个纹理,你要把它映射到一个四边形上,这就是Image类的功能。

Texture,这个就是所谓的纹理。它类似于BitmapData,不能被直接添加到显示对象。相应的,它必须映射到一个显示对象上,如Image。
对于使用GPU加速的纹理贴图,使用图像的宽高必须是2的乘方。在Away3D中,如果不这样,似乎会报错。Starling可以避免这个限制,但是如果你的图像宽高不是2的乘方会消耗更多的内存和资源。
对于Image,Button,Texture与原始的Bitmap之间转换使用。看下边的代码。而Starling的事件方面,似乎不怎么样,少了很多状态侦听。也许,我才刚开始学,没有体会到吧。

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.as

package com.vini123
{
    import starling.text.TextField;
    import starling.display.Sprite;
    import starling.display.Quad;
    import starling.utils.Color;
    import starling.display.Button;
    import starling.textures.Texture;
    import starling.display.Image;
    import starling.events.TouchEvent;

    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.display.Bitmap;

    public class GameRole extends Sprite
    {
        private var _sourceList:Array = ["image/bg.png","image/left.png","image/right.png"];
        private var _loadedNum:int = 0;

        private var _loader:Loader;
        private var _urlRequest:URLRequest;

        private var _txt:TextField;
        private var _bgImage:Image;
        private var _leftButton:Button;
        private var _rightButton:Button;

        public function GameRole():void
        {
            load();
        }

        private function load():void
        {
            for (var i:int =0; i<3; i++)
            {
                switch (i)
                {
                    case 0 :
                        var bgTexture:Texture = Texture.fromBitmap(new Bitmap(new Bg()));
                        _bgImage = new Image(bgTexture);
                        addChild(_bgImage);
                        _bgImage.x = Math.floor((550 - _bgImage.width)* Math.random());
                        _bgImage.y = Math.floor((400 - _bgImage.height) * Math.random());

                        _txt = new TextField(_bgImage.width,_bgImage.height,"This is second Starling","",18,0x00ffff,true);
                        addChild(_txt);
                        _txt.x = _bgImage.x;
                        _txt.y = _bgImage.y;
                        break;
                    case 1 :
                        var leftButtonTexture:Texture = Texture.fromBitmap(new Bitmap(new LeftButton()));
                        _leftButton = new Button(leftButtonTexture,"Play");
                        addChild(_leftButton);
                        _leftButton.x = _bgImage.x + 0;
                        _leftButton.y = _bgImage.y + _bgImage.height - _leftButton.height * 0.5 - 5;

                        _leftButton.addEventListener(TouchEvent.TOUCH  , touchHandler);
                        break;

                    case 2 :
                        _rightButton = new Button(Texture.fromBitmap(new Bitmap(new RightButton())), "Pause");
                        addChild(_rightButton);
                        _rightButton.x = _bgImage.x + _bgImage.width - _rightButton.width - 10;
                        _rightButton.y = _bgImage.y + _bgImage.height - _rightButton.height * 0.5 - 10;
                        _rightButton.addEventListener(TouchEvent.TOUCH , touchHandler);
                        break;
                }

            }
        }

        private function touchHandler(e:TouchEvent):void
        {
            _txt.text = (e.currentTarget as Button).text ;
        }
    }
}