actionscript 3 -停止时钟上的暂停按钮



我有一个"时钟"倒数游戏时间(从9秒到0秒)。我有一个暂停游戏的按钮,所以我想冻结时钟,当我点击播放时,游戏从我冻结的那一秒开始继续。但我不知道该怎么做!你能帮我一下吗?

this.addEventListener(Event.ENTER_FRAME, updateTimer);
    function updateTimer(e:Event){
        var t:uint = getTimer();
    var dt:uint = 9000 - t;
    var totseconds:uint = Math.floor(dt/1000);
    var minutes:uint = Math.floor(totseconds/60);
    var seconds:uint = Math.floor(totseconds%60);
    var minsWithZ = minutes < 10 ? "0" + minutes : minutes;
    var secsWithZ = seconds < 10 ? "0" + seconds : seconds;
    var time = minsWithZ + ":" + secsWithZ;
    this.tempo_txt.text = time;
}   
pausa.addEventListener(MouseEvent.MOUSE_UP, menuPause);
function menuPause(e:MouseEvent){
    ...somegame code...
    voltar.addEventListener(MouseEvent.MOUSE_UP, play);
}
function play (e:MouseEvent){
    ...some game code
}

您至少有两种选择:

1-Andre的回答;

我的回答:

import flash.events.Event;


var dt:int = 9000
var diff:Number=0;
var prevDiff:Number=0;
var currentTime:Number=0;

var t:uint=0;
var totseconds:int=0;
var minutes:int=0;
var seconds:int=0;
var minsWithZ;
var secsWithZ;
var running:Boolean=true;
var time;
this.addEventListener(Event.ENTER_FRAME, updateTimer);


function updateTimer(e:Event){
if(dt<1){dt=1;menuPause(null)}
trace(running);
totseconds= Math.floor(dt/1000);
minutes= Math.floor(totseconds/60);
seconds= Math.floor(totseconds%60);
minsWithZ = minutes < 10 ? "0" + minutes : minutes;
secsWithZ = seconds < 10 ? "0" + seconds : seconds;
time = minsWithZ + ":" + secsWithZ;
this.tempo_txt.text = time;


if(running){
t= getTimer()-diff-prevDiff;
dt=5000- t;

}else{
diff=getTimer()-currentTime;

}


}
pausa.addEventListener(MouseEvent.MOUSE_UP, menuPause);
voltar.addEventListener(MouseEvent.MOUSE_UP, reset);

function menuPause(e:Event){
running=false;
currentTime=getTimer();
prevDiff+=diff;
}
function menuPlay (e:Event){
running=true;
}

function reset(){
running=true;
prevDiff+=9000;

}

关于代码的一点解释:
getTimer()返回从打开应用程序到

的毫秒数。

不能暂停"getTimer()"

但是你可以得到游戏暂停的时间,并从getTimer()中减去。
变量"diff"在这里就是这样做的。
"currentTime"是你暂停游戏的时间。

Andre的回答更简单;
我的答案是更准确的。

因为getTimer()返回的是实际毫秒数,但计时器的滴答并不完全准确。ENTER_FRAME事件和setInterval也与timer相同。

这意味着如果你想要一个更简单的代码,使用Andre的,如果你想要一个准确的计时器,使用我的。

和删除eventListener (3vilguy的回答)是不够的因为getTimer不会暂停!

最好使用Timer - Object

var seconds=9;
var t:Timer=new Timer(1000,seconds);
t.addEventListener(TimerEvent.TIMER, updateTimer);
t.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
updateTimer();    
t.start();
function updateTimer(e:TimerEvent=null){
    var t:uint = t.currentCount;
    var dt:uint = seconds - t;
    var totseconds:uint = dt;
    var minutes:uint = Math.floor(totseconds/60);
    var sec:uint = Math.floor(totseconds%60);
    var minsWithZ = minutes < 10 ? "0" + minutes : minutes;
    var secsWithZ = sec < 10 ? "0" + sec : sec;
    var time = minsWithZ + ":" + secsWithZ;
    this.tempo_txt.text = time;
}   
function timerCompleteHandler(e:TimerEvent):void{
    trace("Timer complete");
}
pausa.addEventListener(MouseEvent.MOUSE_UP, menuPause);
function menuPause(e:MouseEvent){
   t.stop();
    voltar.addEventListener(MouseEvent.MOUSE_UP, play);
}
function play (e:MouseEvent){
    t.start();
}

问候

最新更新