2017-06-16 64 views
2

我写了一个计时器,以显示给用户多少,他/她是在当前的一幕:问题与使用定时器

timer_txt.x = 352; 
timer_txt.y = 705; 
var nCount: Number = 0; 
var myTimer: Timer = new Timer(50, nCount); 

timer_txt.text = "Time: " + nCount.toString(); 
myTimer.start(); 

function countUp(e: TimerEvent): void { 
    nCount++; 
    timer_txt.text = "Time: " + nCount.toString(); 
    if (nCount > 60) { 
     var formattedTime = 
     ((Math.floor(nCount/60)) + ":" + (nCount % 60 >= 10 ? "" : "0") + (nCount % 60)); 
     timer_txt.text = "Time: " + formattedTime.toString(); 
    } 
} 

我有一个reset按钮复位在现场,但没有其他对象timer

我的问题是:

  1. 每当我点击reset按钮时,timer是越来越慢,我不知道为什么,而我不会使在计时器的任何变化。 我有很多flags和许多child在舞台上。当用户点击/触摸reset按钮时,所有flags将等于0,并且所有child将再次到达removedadd

  2. 当用户去其他场景(计时器应该停止工作,而计时器的当前值需要保存在一个变量中),并且当用户再次回到这个场景时,这个计时器应该工作如下: previous value + counting the time

  3. 当我在手机上打开它时,它的速度与PC不同。有没有任何解决方案将其编码为与本地设备的时间兼容? 这是我写了一个函数:

    function timerAtoB(firstColor: int): void { 
        lineColor = firstColor; 
        //GRID; 
        //Path A to B 
        var PathAB: Grid; 
        PathAB = new Grid(4, 35, 20, 22, canvas, lineColor); 
        this.addChild(PathAB); 
    } 
    

此功能是一个维连接到B的尺寸。 A和B之间的连接将使用一个名为Grid的类来构造 - 该类将找到A和B之间的最短路径,并在它们之间建立连接(我不想通过它比它更多地访问它)更复杂)。

,我调用这个函数有一些延迟:

delayCallFunctions(1000, timerAtoB, wireColor); 

当我在我的手机上运行它,这种延迟会正常,但不能在正确的时间工作。例如,我写了1000ms表示在执行约1 sec之后执行该功能,但在我的手机上执行该功能需要多于1 sec

在此先感谢您的时间和帮助。

+0

对于第二个问题打勾,我已经使用一类变量。每当用户离开场景时,当前值将发送给班级,当用户回到同一场景时,班级将把变量传递给场景。但显然它工作不正常! – mazName

+0

您的计时器上没有听众 – BadFeelingAboutThis

回答

3

您的问题很可能是您每次重新访问包含此代码的框架时,都会创建另一个计时器实例。

var nCount: Number = 0; 
var myTimer: Timer = new Timer(50, nCount); 

该代码会将您的nCount重置为0,并在您每次访问该框架时创建一个新的计时器。

最有可能的,你想要做的是:

//just declare the vars 
var nCount:Number; 
var myTimer:Timer; 

//assign them a value only if they are empty 
if(nCount === NaN) nCount = 0; 
if(!myTimer) myTimer = new Timer(50, 0); 

你也想做myTimer.stop();当您离开现场。

桌面/手机之间的速度差异可能与性能有关,因为50毫秒的延迟并不是很多时间做任何计算复杂的事情,移动设备可能无法跟上,因此速度会变慢。考虑延长到100毫秒甚至250毫秒,看看是否有帮助。此外,摆脱formattedTime变种,因为它不需要,并会没有它的计时器会更好地执行。

有一个小窍门,你实际上并不需要的nCount VAR,作为定时器本身具有currentCount财产跟踪它多少次自上次timer.reset()

+0

感谢您的提示和很好的答案。第二个问题已经解决,但即使我给定时器分配'1000ms',第一个和第三个问题仍然存在。 – mazName

+0

如果您想在问题中处理项目1的帮助,请编辑您的问题以包含相关代码(无论您的重置按钮触发的代码如何)。对于#3,或许可以解释一下更多关于正在发生的事情以及如何确定速度差异? – BadFeelingAboutThis

+0

我编辑了这个问题,并提供了更多关于我的问题的信息。请让我知道,如果有任何进一步的信息需要。 – mazName