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