Создание секунд секунд на таймер обратного отсчета, а не тик - PullRequest
0 голосов
/ 14 сентября 2018

Я учитель и ищу настраиваемый таймер обратного отсчета для использования на уроках (я также хочу иметь возможность встроить его в Powerpoint).

Я нашел код ниже, который работает, но я бы хотелнравится обновлять графику и, возможно, заставить секундную стрелку вращаться плавно, а не тикать.

Графическая сторона не проблема, но я борюсь с кодом.Я могу заставить руку двигаться с меньшими приращениями, изменив

hand.rotation +=6;  
// to  
hand.rotation +=1; 

, но она все еще движется только с 1 приращением в секунду.Может ли кто-нибудь указать мне правильное направление, пожалуйста?

Код:

// "Countdown Timer" by Lemmyz

//variables
var count:int;
var timer:Timer = new Timer(1000);

//Sound objects
var alertSnd:Sound = new Alert();
var endSnd:Sound = new AlertEnd();
var startSnd:Sound = new AlertStart();

//Button event listeners
btnStart.addEventListener(MouseEvent.MOUSE_UP, timerStart);
btnStop.addEventListener(MouseEvent.MOUSE_UP, timerStop);
btnReset.addEventListener(MouseEvent.MOUSE_UP, timerReset);
btnOK.addEventListener(MouseEvent.MOUSE_UP, setCount);

//timer object
timer.addEventListener(TimerEvent.TIMER, rot);

//init
txt.text = "Set countdown seconds";
btnStart.enabled = false;
btnReset.enabled = false;
btnStop.enabled = false;

//Functions
function setCount(evt:MouseEvent):void
{
    count = parseInt(inputNum.text);
    btnStart.enabled = true;
    txt.text = "Press START.\n" + count + " secs remaining";
}

function timerStart(evt:MouseEvent):void
{
    endSnd.play();
    timer.start();
    btnStart.enabled = false;
    btnReset.enabled = false;
    btnOK.enabled = false;
    btnStop.enabled = true;

}

function timerStop(evt:MouseEvent):void
{
    timer.stop();
    btnStop.enabled = false;
    btnReset.enabled = true;
    btnStart.enabled = true;
    btnStart.label = "RESUME";
}

function timerReset(evt:MouseEvent):void
{
    timer.stop();
    hand.rotation = 0;
    count = parseInt(inputNum.text);
    btnStop.enabled = false;
    btnReset.enabled = false;
    btnOK.enabled = true;
    btnStart.label = "START";
    txt.text = "Timer reset to " + count + " secs. " + count + " secs remaining";
}

function rot(evt:TimerEvent):void
{
    if (count==0)
    {
        timer.stop();
        hand.rotation = 0;
        count = 60;
        btnReset.enabled = false;
        btnStop.enabled = false;
        btnStart.label = "START";
        btnStart.enabled = true;
        btnOK.enabled = true;
    }
    else
    {
        if (count==31||count==16)
        {
            alertSnd.play();
            count--;
            hand.rotation +=  6;
        }
        else

    {
        count--;
        hand.rotation +=  6;
    }
    if (count==0)
    {
        txt.text = "Time's up! Timer is reset. Press START again.\n" + count + " secs remaining.";
        startSnd.play();
    }
    else
    {
        txt.text = count + " secs remaining";
    }
}
}

Заранее спасибо.

1 Ответ

0 голосов
/ 14 сентября 2018

Эта строка кода означает, что таймер будет срабатывать каждую секунду (1000 мс):

//variables
var timer:Timer = new Timer(1000);

Если вы измените его на меньшее число, например 100, он вызовет rot *Функция 1005 * каждые 100 мс.Но я вижу, что в вашем коде есть зависимости от этого числа 1000, поэтому ваш таймер, вероятно, не сработает.

Я думаю, что в вашем случае лучше всего «сдвигать» руку, а не менять таймер.интервалы.Вместо hand.rotation += 6; попробуйте эту функцию:

import fl.transitions.Tween;
...
// wherever you start the timer call tweenHand function
timer.start();
tweenHand();
...
// also instead of every hand.rotation += 6; call tweenHand function
tweenHand();
...
function tweenHand(): void {
    var currRotation: Number = hand.rotation;
    var myTween: Tween = new Tween(hand, "rotation", null, currRotation, currRotation + 6, 1, true);
    myTween.start();
}
...