我在AS3開發了一個類似於Facebook上的音樂挑戰的Flash遊戲,你需要從一首歌曲中猜出,其中一個是正在播放的歌曲,分數取決於你在30秒內猜出了多少,這個超時,由Timer的一個實例處理。如何通過減慢cpu來防止在Flash遊戲上作弊?
一切正常,但有人指出,通過降低CPU性能,計時器變慢,允許用戶播放更長的時間,猜出更多的歌曲並最終獲得更高的分數,然後我做了一些研究,並閱讀,以防止此,我需要使用系統時間,問題是,我不知道該怎麼做。
任何幫助,非常感謝。
我在AS3開發了一個類似於Facebook上的音樂挑戰的Flash遊戲,你需要從一首歌曲中猜出,其中一個是正在播放的歌曲,分數取決於你在30秒內猜出了多少,這個超時,由Timer的一個實例處理。如何通過減慢cpu來防止在Flash遊戲上作弊?
一切正常,但有人指出,通過降低CPU性能,計時器變慢,允許用戶播放更長的時間,猜出更多的歌曲並最終獲得更高的分數,然後我做了一些研究,並閱讀,以防止此,我需要使用系統時間,問題是,我不知道該怎麼做。
任何幫助,非常感謝。
你可以有一個重複計時器,間隔時間很短,大約100ms左右,並且在每個打勾上勾選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
始終較大。
這樣做,我修改了一下代碼,但經過幾次測試,這已經做到了,非常感謝! – 2013-02-23 03:15:11
我的建議是使用服務器端檢查。玩家開始遊戲 - >寫入開始時間。玩家猜出一首歌 - >向數據庫發送請求,檢查時間,如果還有剩餘時間,請將分數疊加一部分。如果時間到了,用戶仍然發送請求,只需寫下分數,然後讓客戶端應用程序命令停止播放。如果您認爲不允許在您的應用程序中作弊,請比較數據庫中的數據,因爲可以修改輸出的數據包數據。 – vikingmaster 2013-02-22 22:52:24