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时导致那么一小会的时间造成的。
目前遇到的问题就这些,后面会持续更新

浙公网安备 33010602011771号