Starling初级开发一
因为自己最近在尝试做页游到手游的移植,遭遇了性能瓶颈,通过了解发现还是有不少朋友在尝试Starling,并享受它带来的便利,所以才开始关注Starling。当然在深入了解之前也和其他目前比较流行的框架大体做了对比,类似于:ND2D和Are2D。具体的性能评测可以参考2D动画实现效率评测文章,里面分析的还是解释的比较透彻的。
大体看了下Introduction Starling这本书,便开始按照示例进行了一些简单的测试。当然在开始就遭遇了不少小的问题,下面会一一罗列出来。先贴出项目代码:
1、Starling的启动程序:
package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import starling.core.Starling; /** * @ 模块功能:Starling启动模块 * @创建时间 Dec 25, 2012 3:29:08 PM * @创建者:Mr_Right */ [SWF(width="1024" , height="600", backgroundColor=0x000000)] public class StarlingStart extends Sprite { private var _starling:Starling; public function StarlingStart() { addEventListener(Event.ADDED_TO_STAGE , onAddToStage); } private function onAddToStage(event:Event):void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.frameRate = 60; addChild(new Stats()); if(stage.stageWidth && stage.stageHeight) { startGame(); } else { stage.addEventListener(Event.RESIZE , onResize); } } private function onResize(event:Event):void { if(stage.stageWidth && stage.stageHeight) { startGame(); } } private function startGame():void { _starling = new Starling(Game , stage); _starling.start(); } } }
2、主程序
package { import starling.display.Quad; import starling.display.Sprite; import starling.events.Event; /** * @ 模块功能:主游戏入口 * @创建时间 Dec 25, 2012 3:32:10 PM * @创建者:Mr_Right */ public class Game extends Sprite { private var _quad:Quad; //四面体 public function Game() { addEventListener(Event.ADDED_TO_STAGE , onAddToStage); } private function onAddToStage(event:Event):void { _quad = new Quad(200 , 200); _quad.setVertexColor(0 , 0xff0000); _quad.setVertexColor(1 , 0x00ff00); _quad.setVertexColor(2 , 0x0000ff); _quad.setVertexColor(3 , 0xff00ff); addChild(_quad); _quad.x = (stage.stageWidth - _quad.width) >> 1; _quad.y = (stage.stageHeight - _quad.height) >> 1; } } }
遇到的问题:
1、Game文件中的onAddToStage中的event类型,因为Starling的命名和本地API很多都是一致的,所以自己要注意,此处的事件类型其实应该是Starling自带的event类型。
2、Error:Error#3669:输入大小错误,at flash.display3D::Context3D/configureBackBuffer().该问题其实主要还是由stage本身引起的,因为stage的stageWidth和stageHeight为0了,所以变通下在Resize事件中进行Starling的初始化,具体可以参考第一段代码。具体为何stageWidth会为0,这个主要还是SO在嵌入Swf时导致那么一小会的时间造成的。
目前遇到的问题就这些,后面会持续更新