0

我有一个游戏,其目标是射击尽可能多(随机生成)的敌舰,但我想添加一个 30 秒倒计时到零的计时器以添加时间限制,但我不确定我会怎么做它?我有几个 AS 文件,其中包含我的所有代码,可以以不同的速度生成不同大小的船等等,所以如果需要代码片段,我会添加它们。

我试过这样做,但没有奏效:

var gameTime:Number = 30;
var gameTimer:Timer;
static var timeText:TextField = new TextField();

timeText = new TextField();
timeText.x = 560;
timeText.y = 0;
timeText.text = gameTime.toString();
addChild(timeText);

gameTimer = new Timer(30000, gameTime);
gameTimer.addEventListener(TimerEvent.TIMER, gameTimeCount);
gameTimer.start();

function gameTimeCount(e:TimerEvent):void
{
    gameTime--;
    timeText.text = gameTime.toString();
}

但是计数保持在 30 并且不会下降。

我现在拥有的:

4

1 回答 1

0

这是您可以执行此操作的一种方法:

// in class variable declarations
public var gameTime:int;
public var levelDuration:int;

// where you want to start it 
levelDuration = 30;
gameTime = levelDuration;
var gameTimer:Timer = new Timer(1000,levelDuration);
gameTimer.addEventListener(TimerEvent.TIMER, updateTime);
gameTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timeExpired)
gameTimer.start();


function updateTime(e:TimerEvent):void
{
    // your class variable tracking each second, 
    gameTime--;
    //update your user interface as needed

}

function timeExpired(e:TimerEvent):void
{
    var gameTimer:Timer = e.target as Timer;
    gameTimer.removeEventListener(TimerEvent.TIMER, updateTime)
    gameTimer.removeEventListener(TimerEvent.TIMER, timeExpired)

    // do whatever you need to do for game over
}

此代码工作得很好,您需要按照 updateTime 函数注释的建议进行操作:

//update your user interface as needed

根据您帖子中的代码,您需要将该功能调整为如下所示:

function updateTime(e:TimerEvent):void
{
    trace(gameTime);
    // your class variable tracking each second, 
    gameTime--;
    //update your user interface as needed
    timeHeader.text = "Time : " + String(gameTime);

}

我也添加了一个跟踪,所以你可以看到它确实每秒都在更新。

于 2013-04-25T22:06:41.583 回答