Actionscript 3 在Actionscript 3中制作游戏计时器的最佳方法是什么?

Actionscript 3 在Actionscript 3中制作游戏计时器的最佳方法是什么?,actionscript-3,actionscript,timer,Actionscript 3,Actionscript,Timer,我已经建立了一个在线游戏系统,它依靠一个计时器来记录玩家完成一项挑战所花的时间。它需要精确到毫秒。它们的时间存储在SQL数据库中 问题是,当我使用Timer类时,一些玩家在数据库中得到的分数不到一秒钟。(这是不可能的,因为即使在完美的情况下,大多数挑战也至少需要11秒才能完成。) 我发现,如果一个玩家打开了太多的浏览器窗口,和/或一台速度较慢的电脑,flash游戏的速度会减慢,这实际上会影响计时器本身的速度。计时器在屏幕上“旋转”,所以你可以看到数字变慢了 令人沮丧的是,我不能仅仅打开第二个线程

我已经建立了一个在线游戏系统,它依靠一个计时器来记录玩家完成一项挑战所花的时间。它需要精确到毫秒。它们的时间存储在SQL数据库中

问题是,当我使用Timer类时,一些玩家在数据库中得到的分数不到一秒钟。(这是不可能的,因为即使在完美的情况下,大多数挑战也至少需要11秒才能完成。)

我发现,如果一个玩家打开了太多的浏览器窗口,和/或一台速度较慢的电脑,flash游戏的速度会减慢,这实际上会影响计时器本身的速度。计时器在屏幕上“旋转”,所以你可以看到数字变慢了

令人沮丧的是,我不能仅仅打开第二个线程或做一些事情来让flash保持准确的时间,而不管程序中发生了什么。有什么想法吗?

定时器(理论上)独立于帧速率,因此即使播放器减慢帧速率(在大量显示更新的情况下),也应该“按时”执行。当然,计时器仍然在一定程度上依赖于CPU负载,并且会有一些微小的误差。10秒以上的误差?我对此表示怀疑。我想也是

a) 您使用的计时器计数数字不正确(计时器以毫秒而不是秒为单位运行)。如果您每50毫秒运行一次,您可以根据它通过*50毫秒的滴答数计算总时间

b) 您的用户正在使用类似暂停请求和更改其“分数”的功能

c) 游戏中还有一个导致问题的bug

没有示例代码就无法判断。有吗?

定时器(理论上)独立于帧速率,因此即使播放器减慢帧速率(在大量显示更新的情况下),也应该“按时”执行。当然,计时器仍然在一定程度上依赖于CPU负载,并且会有一些微小的误差。10秒以上的误差?我对此表示怀疑。我想也是

a) 您使用的计时器计数数字不正确(计时器以毫秒而不是秒为单位运行)。如果您每50毫秒运行一次,您可以根据它通过*50毫秒的滴答数计算总时间

b) 您的用户正在使用类似暂停请求和更改其“分数”的功能

c) 游戏中还有一个导致问题的bug


没有示例代码就无法判断。有吗?

另一种跟踪时间的方法是在游戏开始时使用
getTimer()
。将结果存储在变量中。游戏结束时的另一个
getTimer()
调用将允许您计算游戏持续的毫秒数。

另一种跟踪时间的方法是在游戏开始时使用
getTimer()
。将结果存储在变量中。游戏结束时的另一个
getTimer()
调用将允许您计算游戏持续的毫秒数。

下面是发生的一般情况:var timer:timer=new timer(1);timer.addEventListener(TimerEvent.timer,updateTimer);函数updateTimer(事件:TimerEvent):void{var time:String=PadZero.convert(event.target.currentCount,6);数字[0]。text=time.charAt(0);数字[1]。text=time.charAt(1);数字[2]。text=time.charAt(2);数字[3]。text=time.charAt(3);数字[4]。text=time.charAr(4);}convert是一个函数,它将零填充到提供的数字的左侧。“currentCount”是我最终存储的内容。它会随着负载的增加而变慢。是的,每毫秒发射和响应一个事件都会让玩家变慢。只要试着追踪currentCount,你就会发现它甚至不会在1秒内达到1000ms。您最好按照@frankhermes的建议,在开始和结束时获取时间;timer.addEventListener(TimerEvent.timer,updateTimer);函数updateTimer(事件:TimerEvent):void{var time:String=PadZero.convert(event.target.currentCount,6);数字[0]。text=time.charAt(0);数字[1]。text=time.charAt(1);数字[2]。text=time.charAt(2);数字[3]。text=time.charAt(3);数字[4]。text=time.charAr(4);}convert是一个函数,它将零填充到提供的数字的左侧。“currentCount”是我最终存储的内容。它会随着负载的增加而变慢。是的,每毫秒发射和响应一个事件都会让玩家变慢。只要试着追踪currentCount,你就会发现它甚至不会在1秒内达到1000ms。按照@frankhermes的建议,你最好在开始和结束时都有时间。