0

我必须做一个 5 分钟的倒计时时钟作为作业。我得到了 as3 的基础,并被告知添加“开始”-“重置”-“停止”按钮。到目前为止,我有一个可观的倒计时,但没有办法控制它。我是 as2 和 flash 的新手,所以我希望这不是“如果你知道,你应该知道你的答案”的情况之一。我试图在网上找到的任何东西都不能真正帮助我,所以如果有人能告诉我我是否走在正确的道路上,或者是否有可能在这段代码上添加按钮来执行上述操作。感谢广告 :)

var secs = "0" + 0;
    var mins = 5;
    timerDisplay.text = mins + ":" + secs;

    var timerInterval = setInterval(countDown,1000);
    //DISPLAYS DYNAMIC TEXT
    function countDown()
    {
        secs--;
        if (secs < 0)
        {
            secs = 59;
            mins--;
        }
        if (secs < 10)
        {
            var secs2 = "0" + secs;
        }
        else
        {
            var secs2 = secs;
        }

        if (mins == 0 && secs == 0)
        {
            clearInterval(timerInterval);//STOPS TIME @ ZERO
        }
        timerDisplay.text = mins + ":" + secs2;
    }
4

2 回答 2

1

由于这是一个作业,我不会给你任何代码,只是一些想法让你开始编写自己的代码。

您可能想要在舞台上添加两个(可能是三个)按钮。一个按钮可以是重置按钮,另一个可以是在启动和停止之间进行权衡的按钮(取决于计时器当前是否正在运行)。

重置按钮所需的唯一代码是将min变量和secs变量设置回其原始值(由于您的间隔代码可能加上 1 秒)。如果您需要帮助开始使用按钮单击抛出功能,请查看mc.onPress方法。

停止按钮所需的唯一代码是阻止间隔计数器继续计数的代码。我相信当你“清零”你的计时器为零时,你已经做了一些事情。

开始按钮所需的唯一代码是重新启动间隔计数器的代码。当你第一次启动你的timerInterval.

如果有人决定在您完成倒计时后单击开始按钮,或者如果有人决定多次单击开始按钮,这将不起作用。

在第一种情况下,倒计时将继续为负数,因此您可能需要编写一个不允许这种情况发生的 if 语句(在开始按钮功能内部)。

而在第二种情况下,每次按下按钮,倒计时都会越来越快。创建一个跟踪程序是否停止的布尔值可能有助于解决该问题。

为了澄清我上面关于间隔代码的声明:您的代码将永远每 1000 毫秒递减一次。文本框仅在您递减时才会刷新,因此如果您尝试在 5 分零零秒内进行重置,您会看到数字跳到 4:59,然后继续递减。如果您重置为 5 分 1 秒,数字将出现跳到 5:00,然后从那里递减。

我希望这有帮助!

于 2013-05-17T09:21:45.557 回答
0
    package 
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;

public class Test extends MovieClip {
    private var _timer:Timer = null;
    private var _repeatCount:int = 0;
    private var _totalMinutes:int = 5;

    public function Test() : void {
        addEventListener(Event.ADDED_TO_STAGE, _Init);

    }

    private function _Init(e:Event) : void {
        _repeatCount = _totalMinutes * 60;
        _timer = new Timer(1000, _repeatCount);
        _timer.addEventListener(TimerEvent.TIMER, _OnTimerFired);
        _timer.start();
    }

    private function _OnTimerFired(e:TimerEvent) : void {
        var minRem:int = (_repeatCount - _timer.currentCount) / 60 ;
        var secRem:int = (_repeatCount - _timer.currentCount) % 60;
        trace(minRem + ":" + secRem);
    }
}
}
于 2013-05-17T08:57:13.913 回答