0

我在 AS3 中开发了一个 Flash 游戏,类似于 Facebook 上的音乐挑战赛,您需要从选择的歌曲中猜测,其中一首是正在播放的歌曲,分数基于您在 30 秒内猜到了多少,这个超时时间是由 Timer 的实例处理。

一切正常,但有人指出,通过降低 cpu 性能,计时器变慢,允许用户播放更长时间,猜测更多歌曲并最终获得更高的分数,然后我做了一些研究,并阅读以防止这种情况,我需要使用系统时间,问题是,我不知道该怎么做。

很感谢任何形式的帮助。

4

1 回答 1

2

你可以有一个间隔很短的重复计时器,大约 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的总是更大。

于 2013-02-22T23:19:27.933 回答