2013-02-22 67 views
0

我在AS3開發了一個類似於Facebook上的音樂挑戰的Flash遊戲,你需要從一首歌曲中猜出,其中一個是正在播放的歌曲,分數取決於你在30秒內猜出了多少,這個超時,由Timer的一個實例處理。如何通過減慢cpu來防止在Flash遊戲上作弊?

一切正常,但有人指出,通過降低CPU性能,計時器變慢,允許用戶播放更長的時間,猜出更多的歌曲並最終獲得更高的分數,然後我做了一些研究,並閱讀,以防止此,我需要使用系統時間,問題是,我不知道該怎麼做。

任何幫助,非常感謝。

+1

我的建議是使用服務器端檢查。玩家開始遊戲 - >寫入開始時間。玩家猜出一首歌 - >向數據庫發送請求,檢查時間,如果還有剩餘時間,請將分數疊加一部分。如果時間到了,用戶仍然發送請求,只需寫下分數,然後讓客戶端應用程序命令停止播放。如果您認爲不允許在您的應用程序中作弊,請比較數據庫中的數據,因爲可以修改輸出的數據包數據。 – vikingmaster 2013-02-22 22:52:24

回答

2

你可以有一個重複計時器,間隔時間很短,大約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始終較大。

+0

這樣做,我修改了一下代碼,但經過幾次測試,這已經做到了,非常感謝! – 2013-02-23 03:15:11