使用计时器的问题

时间:2017-06-16 17:05:05

标签: actionscript-3 flash timer

我写了一个计时器,向用户显示他/她在当前场景中的数量:

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);
    }
    
  4. 此功能用于将A维连接到B维。 A和B之间的连接将使用一个名为Grid的类构建 - 这个类是为了找到A和B之间的最短路径并在它们之间建立连接(我不想通过它它不仅仅是因为它更复杂)。

    我稍稍调用了这个函数:

    delayCallFunctions(1000, timerAtoB, wireColor);
    

    当我在手机中运行时,此延迟将正常工作,但不能在正确的时间内完成。例如,我写1000ms表示在约1 sec之后执行该函数,但在我的移动设备中执行该函数需要的时间超过1 sec

    提前感谢您的时间和帮助。

1 个答案:

答案 0 :(得分: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();

桌面/移动设备之间的速度差异可能与性能有关,因为50ms延迟并不是很多时间来做任何计算复杂的事情,移动设备可能无法跟上,因此速度会变慢。考虑将延迟时间提高到100毫秒甚至250毫秒,看看是否有帮助。另外,在不需要的情况下摆脱formattedTime var,如果没有它,计时器的性能会更好。

作为提示,您实际上并不需要nCount var,因为计时器本身具有currentCount属性,用于跟踪自上次timer.reset()