Я учитель и искал настраиваемый таймер обратного отсчета для использования на уроках (я также хочу иметь возможность встроить его в 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";
}
}
}
Заранее спасибо.





Эта строка кода означает, что таймер срабатывает каждую секунду (1000 мс):
//variables
var timer:Timer = new Timer(1000);
Если вы измените его на меньшее число, например 100, он будет вызывать функцию гнить каждые 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();
}
добро пожаловать @ lukep1984, не стесняйтесь присылать мне свой файл .fla, чтобы я мог его поближе рассмотреть и, возможно, исправить.
Это очень мило. Спасибо еще раз.
Спасибо, я ценю помощь и попробую предложенный вами код.