我在 AS3 中开发了一个 Flash 游戏,类似于 Facebook 上的音乐挑战赛,您需要从选择的歌曲中猜测,其中一首是正在播放的歌曲,分数基于您在 30 秒内猜到了多少,这个超时时间是由 Timer 的实例处理。
一切正常,但有人指出,通过降低 cpu 性能,计时器变慢,允许用户播放更长时间,猜测更多歌曲并最终获得更高的分数,然后我做了一些研究,并阅读以防止这种情况,我需要使用系统时间,问题是,我不知道该怎么做。
很感谢任何形式的帮助。
我在 AS3 中开发了一个 Flash 游戏,类似于 Facebook 上的音乐挑战赛,您需要从选择的歌曲中猜测,其中一首是正在播放的歌曲,分数基于您在 30 秒内猜到了多少,这个超时时间是由 Timer 的实例处理。
一切正常,但有人指出,通过降低 cpu 性能,计时器变慢,允许用户播放更长时间,猜测更多歌曲并最终获得更高的分数,然后我做了一些研究,并阅读以防止这种情况,我需要使用系统时间,问题是,我不知道该怎么做。
很感谢任何形式的帮助。
你可以有一个间隔很短的重复计时器,大约 100 毫秒,并检查new Date().getTime()
每个滴答声。默认情况下,newDate
具有当前系统时间,并getTime()
以毫秒为单位为您提供更简单的比较时间。将其与开始时间进行比较,并在至少经过 30 秒后结束游戏。就像是:
import flash.utils.Timer;
import flash.events.TimerEvent;
var ticker:Timer = new Timer(100, 0);
ticker.addEventListener(TimerEvent.TIMER, checkElapsedTime);
var startTime:Number = new Date().getTime();
ticker.start();
function checkElapsedTime(e:TimerEvent):void {
var now:Number = new Date().getTime();
if (now - startTime >= 30 * 1000) {
// End the game and stop the ticker.
ticker.stop();
ticker.removeEventListener(TimerEvent.TIMER, checkElapsedTime);
}
}
如果计时器非常慢,显然仍然会有一些轻微的延迟,所以以防万一我在提交答案时运行相同的检查,如果在截止日期之后忽略它。
最后,要检查用户是否更改了他们的系统时钟,您可以存储以前的now
并确保新now
的总是更大。