摸索Flash移动开发导入Starling

总所周知,使用传统的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;

添加完如下代码,然后点击调试你就可以看到以下结果。

好的,如果你顺顺利利的走到这一步的并且理解了的话。那么,少年,你可以进行到下一步了。

原文地址:https://www.cnblogs.com/adoontheway/p/2949720.html