停止时钟暂停按钮

时间:2015-05-31 14:38:21

标签: actionscript-3 timer

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

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

}

2 个答案:

答案 0 :(得分:0)

更好地使用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 :(得分:0)

至少有两个选择:

1-Andre的回答;

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()返回打开应用程序时的毫秒数和

  

你不能暂停“getTimer()”

但你可以获得游戏暂停的时间并从getTimer()中减去 变量“diff”在这里做到了。
并且“currentTime”是你暂停游戏的时候。

安德烈的答案更容易;
我的回答是准确

因为getTimer()返回实际的毫秒数,但是计时器没有准确计算.ENTER_FRAME事件和setInterval也与计时器相同。

这意味着如果你想要一个更简单的代码,请使用Andre's,如果你想要一个准确的Timer,请使用Mine。

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

我希望我的答案有用。