总所周知,使用传统的Flash显示列表在移动元件上面开发游戏的话,会有些勉强。
得益于Adobe公司的危机感,去年Action Script(Flash的脚本语言)开始支持显卡加速,没记错的话应该是Flash Player 10.4吧。现在as的显卡加速的框架就有很多:starling, ND2d,away3d (3d版,已经和Adobe合作)等等。
出名的愤怒的小鸟使用的正是我们这节要开始学习的Starling框架。
上一节我们导入了starling的swc文件,所以我们可以在这里使用了。
首先我们要创建一个Starling的主入口,要继承Starling的显示类。如下:
package com.ado.mobile0 { import starling.display.Sprite; import starling.events.Event; import starling.text.TextField; /** * ... * @author Long.J.Du */ public class GameMain extends Sprite { public function GameMain() { super(); this.addEventListener(Event.ADDED_TO_STAGE, onAdded); } private function onAdded(e:Event):void { this.removeEventListener(Event.ADDED_TO_STAGE, onAdded); trace("Starling initialized..."); } } }
由于Starling是模仿的Flash的显示列表的架构,所以可以根据自己学习ActionScript的经验写代码。
写好了上面的游戏入口之后,我们需要在项目主类上面写一点东西。
首先是要把之前写的Hello, Mobile删掉。
然后在onAdded函数里面新建一个starling的实例,
实例的构造函数第一个参数是游戏主类类名,也就是上面新建的GameMain,第二个函数是舞台,this.stage即可,第三个是viewport,也就是显卡视窗,我们可以在监听舞台尺寸变化的时候将这个修改到对应的尺寸,后面几个一个是stage3d,可以通过Stage3D申请到Context3D之后传给他,不过这种活还是留给Starling帮你完成吧。
初始化starling之后,我们需要在主文件里面增加帧事件监听器用来做给starling做渲染,里面只需要调用starling的render方法就可以了。如下:
package com.ado.mobile0 { import flash.desktop.NativeApplication; import flash.events.Event; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.text.TextField; import flash.ui.Multitouch; import flash.ui.MultitouchInputMode; import starling.core.Starling; /** * ... * @author Long.J.Du */ public class Main extends Sprite { private var star:Starling; public function Main():void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.addEventListener(Event.DEACTIVATE, deactivate); this.addEventListener(Event.ADDED_TO_STAGE, onAdded); // touch or gesture? Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; // entry point // new to AIR? please read *carefully* the readme.txt files! } private function onAdded(e:Event):void { this.removeEventListener(Event.ADDED_TO_STAGE, onAdded); star = new Starling(GameMain, this.stage); this.addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(e:Event):void { star.render(); } private function deactivate(e:Event):void { // auto-close NativeApplication.nativeApplication.exit(); } } }
为了让程序看起来更直观的知道starling在干嘛,我们还是来一次hello starling吧。
在starling的主类中添加一个Starling的textfield吧。Starling的TextField和Action Script原生态的TextField用法差不多。
如下:
var text:TextField = new TextField(100, 30, "Hello Starling", "Arial", 14); addChild(text); text.color = 0xff1111; text.x = this.stage.stageWidth - text.width >> 1; text.y = this.stage.stageHeight - text.height >> 1;
添加完如下代码,然后点击调试你就可以看到以下结果。
好的,如果你顺顺利利的走到这一步的并且理解了的话。那么,少年,你可以进行到下一步了。