上边这个就是使用了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 ; } } }