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;
}
}
}