`

Flixel横板游戏制作教程(七)—VictoryState(胜利状态)

阅读更多

from: http://bbs.9ria.com/thread-77302-1-1.html

 

 

 

演示程序

 

http://www.adamatomic.com/canabalt/

 

http://www.flixel.org/mode/

 

Flixel横板游戏制作教程(七)—VictoryState(胜利状态)

本教程是接着Flixel横板游戏制作教程(六)—SoundsandMusic(音效与音乐)来做的。
下面是 把敌人都干掉后,转跳到胜利画面。
先看看胜利状态类VictoryState:

 

package 
{
        import org.flixel.FlxG;
        import org.flixel.FlxState;
        import org.flixel.FlxText;
        
        /**
         * ...
         * @author zb
         */
        public class VictoryState extends FlxState 
        {
                //胜利画面的等待时间计数
                private var _time:Number;
                override public function create():void 
                {
                        _time = 0;
                        //flash 这里是指,从某个颜色开始过度到透明
                        //参数1:起初显示的颜色
                        //参数2:过度的时间
                        FlxG.flash.start(0xffffffff, 1);
                        
                        //添加一个文本
                        add(new FlxText(100, 50, 100, 'Victory!'));
                }
                
                override public function update():void 
                {
                        //elapsed,该值是指,每一帧所经过的时间
                        _time += FlxG.elapsed;
                        if (_time>5) 
                        {
                                //fade,是指从 透明 过度到 想要的颜色
                                //参数1:想要过度的颜色
                                //参数2:经过的时间
                                //参数3:过度结束后,调用的方法
                                FlxG.fade.start(0xffffffff, 1, onPlay);
                        }
                        super.update();
                }
                
                private function onPlay():void
                {
                        //转跳到 GameState
                        FlxG.state = new GameState;
                }
        }
        
}

 接来下是 Gamestate :

package 
{
        import org.flixel.FlxG;
        import org.flixel.FlxGroup;
        import org.flixel.FlxObject;
        import org.flixel.FlxState;
        import org.flixel.FlxText;
        import org.flixel.FlxTileblock;
        import org.flixel.FlxU;
        
        /**
         * ...
         * @author zb
         */
        public class GameState extends FlxState 
        {
                //*********已有的内容**************//
                
                //敌人计数器
                private var enemyCounter:FlxText;
                override public function create():void 
                {
                        //*********已有的内容**************//
                        
                        //加入敌人计数器
                        addEnemyCounter();
                }
                
                //*********已有的内容**************//
                
            override public function update():void 
                {
                        //*********已有的内容**************//
                        
                        //检查敌人数量
                        checkEnemyCount();
                        
                        
                        //还是要提醒下,别忘了加上。。。
                        super.update();
                }
                
                //*********已有的内容**************//
                
                private function addEnemyCounter():void
                {
                        //加入一个文本,显示敌人的数量
                        enemyCounter = new FlxText(150, 20, 20, String(ENEMY_COUNT));
                        
                        //scrollfactory 属性
                        //表示 该对象 在屏幕移动的时候
                        //跟着屏幕一起移动的比例,范围 在 0 到 1 这个区间
                        //0 表示 不与屏幕移动
                        //1表示 完全跟着屏幕移动
                        //而之间的范围 从 0 开始,越大,随着屏幕移动的距离越大
                        //具体同学们可以自行设置参数理解
                        //x 和 y 分表表示 对水平移动和垂直移动的比例
                        enemyCounter.scrollFactor.x = 0;
                        enemyCounter.scrollFactor.y = 0;
                        add(enemyCounter);
                }
                
                private function checkEnemyCount():void
                {
                        //计数值,刷新查看 当前敌人组中 死亡敌人的数量
                        var count:int = 0;
                        for each (var enemy:Enemy in enemyGroup.members) 
                        {
                                if (enemy.dead) 
                                {
                                        count++;
                                }
                        }
                        
                        //这里刷新 剩余敌人数量的文本
                        enemyCounter.text = String(ENEMY_COUNT - count);
                        
                        //当 死亡敌人的数量达到 最大敌人数的时候
                        if (count==ENEMY_COUNT) 
                        {
                                //过渡白色 ,结束后转跳 胜利状态
                                FlxG.fade.start(0xffffffff, 1, onVictroy);
                        }
                }
                
                private function onVictroy():void
                {
                        //停止音乐
                        FlxG.music.stop();
                        FlxG.state = new VictoryState;
                }
        }
        
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics