2014-02-25 166 views
0

我會盡我所能地解釋我的問題。 我不是要求代碼,只是爲了做到這一點的最佳方法。更新特定時間戳的信息

我想創建一個網頁遊戲,並使用時間升級的東西,建築等

例如,建屋1將需要1小時。

因此,我會在用戶採取行動時開始保存timestamp+(60*60)

我的問題是,如何更新它的最佳方式?

我想到的一種方法是添加函數,檢查用戶的每個頁面視圖是否完成。 但是,如果他沒有登錄更新不會發生。

我想過的第二種方式是爲每個用戶的每個頁面視圖檢查註冊的每個用戶。但它不是有效的,如果沒有用戶登錄,就會出現問題。

有什麼建議嗎?

+1

預定的cron工作怎麼樣? –

+0

你可以隨時使用crons,但是如果你有很多玩家,你必須每分鐘運行一次cron,所以我不確定它是否有效。它可以比每次頁面加載手動檢查都更好。 – ascx

+0

如果您想使用實時應用程序,請查看NodeJS。 –

回答

1

我讓我的遊戲簡單,沒有crons。 當玩家想要的東西,需要時間,我剛剛更新了他的數據庫中的信息與結束這項工作的合適時間(列只是一個例子)

UPDATE player SET jobend = UNIX_TIMESTAMP() + (60*60*4) # ending in 4 hours 

然後,每個頁面有大約剩餘時間的信息,我只是用這樣的:

SELECT (jobend - UNIX_TIMESTAMP()) AS jobremaining FROM player 

我使用strftime格式正確的時間,我是顯示給用戶。 在剩餘時間爲負的情況下,工作完成。 由於用戶在連接時能夠完成某項工作,因此不需要進行絕對計數。

當玩家只是改變頁面或做別的事情時,我有一個功能,我只是檢查所有及時的事件,而用戶在線(所以捕捉任何負面的計時器),然後呈現與JavaScript的任何變化(我張貼的JavaScript計數器對於每一頁)

現在,如果你談論實時更新,cron是方式,但你確定你會需要它的遊戲嗎?我自己也問過這個問題,答案不是。

編輯

如果其他玩家看到buildings on schedule頁面(假設一個頁)我在做相同的計算;如果某個特定玩家的時間剛剛變爲負值(無論其他玩家是否看到該頁面),我只需在建築物(在數據庫中進行所有更改)就給他獎勵,即使他的離線。這沒有什麼壞處,因爲反正他什麼都做不了。其他球員只會看到他有一座建築。這裏的關鍵是我執行所需的更新PHP代碼,不管玩家連接到遊戲;只要至少有一個玩家登錄,我正在執行一切的進度功能。 這聽起來並不那麼慢(通過使用訪問特定頁面的連接播放器更新所有播放器)。你只是有一個'工作'的表,並檢查當前時間的計時器。更像是一個獲取負面問題的單個查詢。

+0

謝謝,但是當用戶沒有登錄時會發生什麼?例如,如果用戶建造房屋,我希望其他用戶查看是否建造房屋,即使用戶從未再次登錄過。 – OfirH

+0

很高興你問過我錯過的那個問題:)查看我的編輯 – 2014-02-25 17:42:58

+0

謝謝!你真的幫了我! – OfirH