【问题标题】:Countdown timer for time-based game基于时间的游戏倒计时
【发布时间】:2013-04-25 21:58:52
【问题描述】:

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

我尝试过这样做,但没有成功:

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 并且没有下降。

我现在拥有的:

【问题讨论】:

  • 您将计时器设置为每滴答声 30000 毫秒。那是30秒。你希望它是 1000,也就是 1 秒。这就是您应该更新的频率。
  • 你没有更新你的 timeHeader。我在updateTime 处理程序//update your user interface as needed 中发表了评论。尝试将此行添加到该处理程序 -- timeHeader.text = "Time : " + String(gameTime); - 它对我来说非常有效。
  • 我刚刚剪切/粘贴了您上面的代码,它可以完美运行。你的页面有多宽?您是否有可能将文本字段 timeText 放置在舞台外?你的舞台宽度是多少?
  • 我查看了您的文件,这是您如何为使文本消失的文本字段设置字体格式的问题。柜台工作得很好。在最初设置文本之前使用timeText.defaultFormat = scoreFormat;。请接受我的回答,因为它工作得很好。如果您还有其他格式问题,只需针对该主题提出一个新问题。

标签: actionscript-3 flash flash-cs6


【解决方案1】:

这是您可以做到这一点的一种方法:

// 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);

}

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

【讨论】:

  • 我将此编辑为倒计时。不知道我还能如何帮助你,这会奏效。
  • 更新了使用 gameTime 的答案,就像你的一样。我误会了,以为您想跟踪已过期的秒数。
  • 嗯,我试过了,但它只是从 0 开始计时,而不是从 30 开始?
  • 我修改了,你拿到最新版了吗?您是否在开始时将 gameTime 设置为关卡持续时间的值?
  • 看看我回答中的代码——gameTime = levelDuration; 和之前的那一行,levelDuration = 30; 如果这两行都有,gameTime 怎么设置为 0?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 2017-07-10
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多