如何使用 ActionScript 3 在 Adobe Flash 中的计时器中编写暂停代码
How to code pause in timer in Adobe Flash using ActionScript 3
我在我的项目中做定时器。现在我想在我的项目中添加暂停功能。我尝试添加 stop.timer 但没有成功。任何人都知道如何添加暂停以及用户何时恢复计时器正常工作?
var endTime:int = getTimer();
endTime += 40*60*1000; //adjust endTime to 15 minutes in the future.
var countdownTimer:Timer = new Timer(1000);
countdownTimer.addEventListener(TimerEvent.TIMER, updateTime);
countdownTimer.start();
function updateTime(e:TimerEvent):void
{
var timeLeft:Number = endTime - getTimer();
var seconds:Number = Math.floor(timeLeft / 1000);
var minutes:Number = Math.floor(seconds / 60);
seconds %= 60;
minutes %= 60;
var sec:String = seconds.toString();
var min:String = minutes.toString();
if (sec.length < 2) {
sec = "0" + sec;
}
if (min.length < 2) {
min = "0" + min;
}
var time:String = min + ":" + sec;
countdown.text = time;
}
如果您只使用一个计时器而忘记 getTimer()
,这会容易得多。
这是一个带有注释的示例:
//make the timer tick every second 900 times (so it will run 15 minutes total)
var countdownTimer:Timer = new Timer(1000, 900);
//listen for the tick
countdownTimer.addEventListener(TimerEvent.TIMER, updateTime);
//listen for the completion of the timer (if you want to do something when all done
countdownTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerComplete);
countdownTimer.start();
function updateTime(e:TimerEvent):void
{
//this will give the seconds left if the delay is 1000ms
var secondsLeft:Number = countdownTimer.repeatCount - countdownTimer.currentCount;
var minutesLeft:Number = Math.floor(seconds / 60);
//....rest of your code
}
现在,您可以随时使用 countdownTimer.stop();
暂停计时器并使用 countdownTimer.start();
恢复计时
你应该简单地扩展定时器 class。
package {
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.utils.getTimer;
/**
* The <code>MyTimer</code> class.<br/>
*/
public class MyTimer implements IEventDispatcher {
//==========================================================================
// Constructor
//==========================================================================
/** Constructor */
public function MyTimer(delay:Number, repeatCount:int = 0) {
super();
$timer = new Timer(delay, repeatCount);
$startTime = NaN;
$past = NaN;
$correct = false;
$timer.addEventListener(TimerEvent.TIMER, timerHandler, false, int.MAX_VALUE);
}
//==========================================================================
// Properties
//==========================================================================
private var $correct:Boolean;
private var $past:Number;
private var $startTime:Number;
private var $delay:Number;
private var $timer:Timer;
//==========================================================================
// Public methods
//==========================================================================
public function reset():void {
$startTime = NaN;
$past = NaN;
$timer.reset();
}
public function stop():void {
if(!$timer.running)
return;
$past = getTimer() - $startTime;
$timer.stop();
}
public function start():void {
if(isNaN($startTime)) {
$startTime = getTimer();
} else {
$delay = $timer.delay;
$timer.delay = $timer.delay - ((getTimer() - $startTime) % $timer.delay);
$correct = true;
}
$timer.start();
}
public function dispatchEvent(event:Event):Boolean {
return $timer.dispatchEvent(event);
}
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false,
priority:int = 0, useWeakReference:Boolean = false):void {
$timer.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void {
$timer.removeEventListener(type, listener, useCapture);
}
public function willTrigger(type:String):Boolean {
return $timer.willTrigger(type);
}
public function hasEventListener(type:String):Boolean {
return $timer.hasEventListener(type);
}
//==========================================================================
// Event Listeners
//==========================================================================
private function timerHandler(event:Event):void {
if($correct) {
$timer.delay = $delay;
$correct = false;
}
}
} // <- end class ->
}
我在我的项目中做定时器。现在我想在我的项目中添加暂停功能。我尝试添加 stop.timer 但没有成功。任何人都知道如何添加暂停以及用户何时恢复计时器正常工作?
var endTime:int = getTimer();
endTime += 40*60*1000; //adjust endTime to 15 minutes in the future.
var countdownTimer:Timer = new Timer(1000);
countdownTimer.addEventListener(TimerEvent.TIMER, updateTime);
countdownTimer.start();
function updateTime(e:TimerEvent):void
{
var timeLeft:Number = endTime - getTimer();
var seconds:Number = Math.floor(timeLeft / 1000);
var minutes:Number = Math.floor(seconds / 60);
seconds %= 60;
minutes %= 60;
var sec:String = seconds.toString();
var min:String = minutes.toString();
if (sec.length < 2) {
sec = "0" + sec;
}
if (min.length < 2) {
min = "0" + min;
}
var time:String = min + ":" + sec;
countdown.text = time;
}
如果您只使用一个计时器而忘记 getTimer()
,这会容易得多。
这是一个带有注释的示例:
//make the timer tick every second 900 times (so it will run 15 minutes total)
var countdownTimer:Timer = new Timer(1000, 900);
//listen for the tick
countdownTimer.addEventListener(TimerEvent.TIMER, updateTime);
//listen for the completion of the timer (if you want to do something when all done
countdownTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerComplete);
countdownTimer.start();
function updateTime(e:TimerEvent):void
{
//this will give the seconds left if the delay is 1000ms
var secondsLeft:Number = countdownTimer.repeatCount - countdownTimer.currentCount;
var minutesLeft:Number = Math.floor(seconds / 60);
//....rest of your code
}
现在,您可以随时使用 countdownTimer.stop();
暂停计时器并使用 countdownTimer.start();
你应该简单地扩展定时器 class。
package {
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.utils.getTimer;
/**
* The <code>MyTimer</code> class.<br/>
*/
public class MyTimer implements IEventDispatcher {
//==========================================================================
// Constructor
//==========================================================================
/** Constructor */
public function MyTimer(delay:Number, repeatCount:int = 0) {
super();
$timer = new Timer(delay, repeatCount);
$startTime = NaN;
$past = NaN;
$correct = false;
$timer.addEventListener(TimerEvent.TIMER, timerHandler, false, int.MAX_VALUE);
}
//==========================================================================
// Properties
//==========================================================================
private var $correct:Boolean;
private var $past:Number;
private var $startTime:Number;
private var $delay:Number;
private var $timer:Timer;
//==========================================================================
// Public methods
//==========================================================================
public function reset():void {
$startTime = NaN;
$past = NaN;
$timer.reset();
}
public function stop():void {
if(!$timer.running)
return;
$past = getTimer() - $startTime;
$timer.stop();
}
public function start():void {
if(isNaN($startTime)) {
$startTime = getTimer();
} else {
$delay = $timer.delay;
$timer.delay = $timer.delay - ((getTimer() - $startTime) % $timer.delay);
$correct = true;
}
$timer.start();
}
public function dispatchEvent(event:Event):Boolean {
return $timer.dispatchEvent(event);
}
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false,
priority:int = 0, useWeakReference:Boolean = false):void {
$timer.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void {
$timer.removeEventListener(type, listener, useCapture);
}
public function willTrigger(type:String):Boolean {
return $timer.willTrigger(type);
}
public function hasEventListener(type:String):Boolean {
return $timer.hasEventListener(type);
}
//==========================================================================
// Event Listeners
//==========================================================================
private function timerHandler(event:Event):void {
if($correct) {
$timer.delay = $delay;
$correct = false;
}
}
} // <- end class ->
}