• 摸索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;

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

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

  • 相关阅读:
    【安徽集训】fiend
    【安徽集训】Emerald
    【安徽集训】Entropy
    【安徽集训】字符串
    【福建集训】果树
    【CF335 E】Counting Skyscrapers
    【BZOJ 3514】Codechef MARCH14 GERALD07 加强版
    【未知来源】Randomized Binary Search Tree
    【ZJOI 2016】旅行者
    【AGC002 E】Candy Piles
  • 原文地址:https://www.cnblogs.com/adoontheway/p/2949720.html
Copyright © 2020-2023  润新知