我在AS3开发了一个flash游戏,类似于Facebook上的音乐挑战,你需要从一系列歌曲中猜测,哪一个是正在播放的歌曲,分数取决于你在30秒内猜到了多少,这个超时,由Timer实例处理。
一切都运行良好,但有人指出,通过降低CPU性能,计时器变慢,允许用户播放更长时间,猜测更多歌曲并最终获得更高分数,然后我做了一些研究,并阅读以防止这种情况,我需要使用系统时间,问题是,我不知道该怎么做。
非常感谢任何帮助。
答案 0 :(得分:2)
你可以有一个间隔很短的重复计时器,大约100毫秒,并在每个刻度线上检查new Date().getTime()
。默认情况下,新Date
具有当前系统时间,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
始终更大。