【问题标题】:Issue with using timers使用计时器的问题
【发布时间】:2017-06-16 17:05:04
【问题描述】:

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

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. 每次用手机打开,速度都和电脑不一样。是否有任何解决方案将其编码为与本机设备的时序兼容? 这是我写的一个函数:

    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);
    }
    

这个功能是将A维度连接到B维度。 A 和 B 之间的连接将使用一个名为 Grid 的类来构建 - 这个类是为了找到 A 和 B 之间的最短路径并在它们之间建立连接(我不想通过它比这更多因为它更复杂)。

我会延迟调用这个函数:

delayCallFunctions(1000, timerAtoB, wireColor);

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

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

【问题讨论】:

  • 第二期,我使用了一个变量类。每次用户离开场景时,当前值都会发送给类,当用户回到同一个场景时,类会将变量传递给场景。但显然它不能正常工作!
  • 你的计时器上没有监听器

标签: actionscript-3 flash timer


【解决方案1】:

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

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 var,因为它不是必需的,如果没有它,计时器会更好地执行吗。

作为提示,您实际上并不需要 nCount 变量,因为计时器本身具有 currentCount 属性,可以跟踪自上次 timer.reset() 以来它被滴答的次数

【讨论】:

  • 感谢您的提示和很好的回答。第二个问题已解决,但即使我为计时器分配了“1000ms”,第一个和第三个问题仍然存在。
  • 如果您需要问题中第 1 项的帮助,请编辑您的问题以包含相关代码(无论您的重置按钮触发什么代码)。对于#3,也许可以多解释一下正在发生的事情以及您如何确定存在速度差异?
  • 我已编辑问题并提供了有关我的问题的更多信息。如果需要任何进一步的信息,请告诉我。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 2012-03-12
相关资源
最近更新 更多