我写了一个计时器,向用户显示他/她在当前场景中的数量:
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
。
我的问题是:
每当我点击reset
按钮时,timer
变得越来越慢,我不知道为什么我没有对计时器进行任何更改。
我在舞台上有很多flags
和许多child
。当用户点击/触摸reset
按钮时,所有flags
将等于0
,所有child
将为removed
和add
再次到舞台。
当用户前往其他场景时(定时器应停止工作,而定时器的当前值需要保存在变量中),当用户再次回到此场景时,此定时器应该像:previous value + counting the time
。
当我在手机中打开它时,它的速度与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);
}
此功能用于将A维连接到B维。 A和B之间的连接将使用一个名为Grid
的类构建 - 这个类是为了找到A和B之间的最短路径并在它们之间建立连接(我不想通过它它不仅仅是因为它更复杂)。
我稍稍调用了这个函数:
delayCallFunctions(1000, timerAtoB, wireColor);
当我在手机中运行时,此延迟将正常工作,但不能在正确的时间内完成。例如,我写1000ms
表示在约1 sec
之后执行该函数,但在我的移动设备中执行该函数需要的时间超过1 sec
。
提前感谢您的时间和帮助。
答案 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()