在暂停按钮上停止时钟

Stop clock on pause button

我有一个"clock"游戏时间倒计时(从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

}

最好使用 Timer- 对象

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();

}

问候

你至少有两个选择:

1-安德烈的回答;

2-我的回答:

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() returns 从您打开应用程序开始的毫秒数和

You can't Pause "getTimer()"

但你可以获得游戏暂停的时间并从 getTimer() 中减去。
变量 "diff" 在此处执行此操作。
"currentTime" 是您暂停游戏的时间。

安德烈的回答更简单;
我的回答更准确

因为 getTimer() returns 真正的毫秒数,但定时器没有准确计时 accurate.ENTER_FRAME 事件和 setInterval 也与定时器相同。

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

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

希望我的回答对你有用。