我编写了一个计时器来向用户显示他/她在当前场景中的时间:
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();
}
}
我有一个重置
按钮来重置场景中的其他对象,但不重置计时器
。
我的问题是:
每当我点击
重置
按钮时,计时器
就会变得越来越慢,我不知道为什么,而我没有对定时器。 我在舞台上有许多旗帜
和许多child
。当用户单击/触摸reset
按钮时,所有flags
将等于0
并且所有child
将被删除
并再次添加
到舞台。当用户要去其他场景时(计时器应该停止工作,而计时器的当前值需要保存在变量中),并且当用户再次回到这个场景时,这个计时器应该像这样工作:
前一个值+计算时间
。我在手机上打开它的时候,速度和电脑上不一样。是否有任何解决方案可以对其进行编码以与 native 设备的时序兼容? 这是我写的一个函数:
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秒
后执行该函数,但在我的手机中执行该函数需要超过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()
关于actionscript-3 - 使用计时器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44594541/