如何通过减慢CPU来防止在Flash游戏中作弊?

时间:2013-02-22 22:26:32

标签: actionscript-3 actionscript anti-cheat

我在AS3开发了一个flash游戏,类似于Facebook上的音乐挑战,你需要从一系列歌曲中猜测,哪一个是正在播放的歌曲,分数取决于你在30秒内猜到了多少,这个超时,由Timer实例处理。

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

非常感谢任何帮助。

1 个答案:

答案 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始终更大。