Actionscript 需要暂停的时间

Actionscript 需要暂停的时间,actionscript,timer,Actionscript,Timer,我正在开发一款手机游戏,需要游戏时钟在游戏失去焦点时暂停,例如当来电时。我所有的东西都在工作,除了当游戏再次获得焦点时,时间会调整到好像它一直在运行一样。如果有人回来时接到3分钟的电话,他们应该找到比赛时间 这是我的密码: public function showTime(event:Event){ gameTime = getTimer()-gameStartTime; timeDisplay.text = "Time: "+clockT

我正在开发一款手机游戏,需要游戏时钟在游戏失去焦点时暂停,例如当来电时。我所有的东西都在工作,除了当游戏再次获得焦点时,时间会调整到好像它一直在运行一样。如果有人回来时接到3分钟的电话,他们应该找到比赛时间

这是我的密码:

    public function showTime(event:Event){
            gameTime = getTimer()-gameStartTime;
            timeDisplay.text = "Time: "+clockTime(gameTime);
        }

    public function clockTime(ms:int) {
        var seconds:int = Math.floor(ms/1000);
        var minutes:int = Math.floor(seconds/60);
        seconds -= minutes*60;

        var timeString:String = minutes+":"+String(seconds+100).substr(1,2);
        return timeString;
    }


    public function onActivate(event:Event):void {
        addEventListener(Event.ENTER_FRAME, showTime);
    }


    public function onDeactivate(event:Event):void {
        removeEventListener(Event.ENTER_FRAME, showTime);
    }
我已经在谷歌上搜索了两天,我被卡住了。有人能给我指一下正确的方向吗?一些示例代码也会带来好处,因为我对AS3还很陌生。谢谢

Rich

您应该创建一个计时器对象,并将事件侦听器添加到“tick”以更新时钟,而不是使用getTimer()。您甚至可以将其设置为每秒滴答一次,这样您就不必转换MS

public function onActivate(event:Event):void {
    myTimer.start();
}


public function onDeactivate(event:Event):void {
    myTimer.stop();
}

请参阅计时器参考:

您正在根据当前时间计算时间-
游戏开始时间
。您或者需要考虑延迟(在
onActivate()
onActivate()
函数中使用
getTimer()
计算停止的总时间,然后将该差异添加到
gameStartTime
),或者如果您不想更改
gameStartTime
,然后你根据delta时间计算你的时间。比如:

private var m_prevTime:int = 0;

public function startGame():void
{
    // set the prevTime only when you start the game, otherwise you'll 
    // take into account all the time for flash to get going, your init,
    // opening screens etc
    this.m_prevTime = getTimer();
}

public function showTime(event:Event)
{
    // get the difference in time
    var currTime:int = getTimer();
    gameTime += currTime - this.m_prevTime // currTime - prevTime = delta time
    this.m_prevTime = currTime; // hold the current time

    // display it
    timeDisplay.text = "Time: "+clockTime(gameTime);
}


public function onActivate(event:Event):void 
{
    // we're reactivating, so make sure prev time is updated
    this.m_prevTime = getTimer();
    addEventListener(Event.ENTER_FRAME, showTime);
}

当你从更新回来时,你会错过一帧的时间,但它是不可见的(或者你可以在
onActivate()
函数中减去一帧的时间)

你可以查看我不久前写的秒表教程:

它是用FlexBuilder3编写的,但是您可以轻松地复制/粘贴代码。还包括启用了视图源的示例

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle"
backgroundColor="white" viewSourceURL="srcview/index.html" creationComplete="init()">

<mx:Script>
    <![CDATA[
        import flash.utils.getTimer;
        import flash.utils.Timer;
        import flash.events.TimerEvent;

        private const TIMER_INTERVAL:int = 50;
        private var timerAtStart:Number = 0;
        private var timerAtPause:Number = 0;
        private var t:Timer;
        private var d:Date;

        [Bindable] private var sec:int = 0;
        [Bindable] private var min:int = 0;
        [Bindable] private var mls:int = 0;

        private function init():void {
            t = new Timer(TIMER_INTERVAL);
            t.addEventListener( TimerEvent.TIMER, updateTimer );
        }

        private function updateTimer( evt:TimerEvent ):void{
            d = new Date( getTimer() - timerAtStart + timerAtPause);
            min = d.minutes;
            sec = d.seconds;
            mls = d.milliseconds;
        }

        private function startPauseTimer( event:MouseEvent ):void{
            if ( event.target.label == "start" ) {
                event.target.label = "pause";
                timerAtStart = getTimer();
                t.start();
            } else {
                event.target.label = "start";
                timerAtPause = min * 60000 + sec * 1000 + mls;
                t.stop();
            }

        }

    ]]>
</mx:Script>

<mx:Label text="{min + ' : ' + sec + ' : ' + mls}" fontSize="16" fontWeight="bold"/>
<mx:HBox>
    <mx:Button label="start" click="startPauseTimer( event )"/>
</mx:HBox>
</mx:Application>


nope,getTimer()是一个全局函数,返回自程序启动以来的毫秒数噢,很有趣。我不知道,我不做很多游戏。不过,我的答案仍然是一样的。他应该实例化一个计时器对象,这样他就可以启动/停止它,并向tics添加事件。谢谢。一旦你把延误考虑在内,我决定走那条路,因为这对我来说是有意义的。我添加了两个新的getTimer(),并从开始处减去暂停,然后从gameStartTime中减去延迟量。还没有在设备上安装,但它可以在Flash中工作。非常感谢你的帮助!时间呢?加上3600000小时?