2017-03-09 44 views
0

我正在製作一個基於文本的遊戲,例如ZorkA Hitchhiker's Guide to the Galaxy,這是基於網絡的,針對一個學年的學校項目。現在我已經構建了一個解析器,並且我的遊戲的基本結構已經完成。我的問題是,我需要在玩家重新加載頁面後保存數據。如何在每次用戶加載頁面時存儲整個Javascript文件並加載更改後的版本?

我有,叫「content.js」存儲所有數據的進行遊戲,如玩家的位置的JavaScript文件,什麼是區域等
「content.js」包含對象聲明,並與這些對象相對應的函數,如「onPickup()」。

我想通過執行一些函數來保存這個文件,並且每次用戶加載頁面時,它都會加載這個保存的「content.js」版本,而不是原始版本。例如,如果用戶在某個區域中更改了某些內容,則需要保存其進度,並且在重新加載頁面時,該更改將繼續。

通常我會將所有這些對象存儲在一個數組中,並嘗試保存該數組,但因爲我在實際遊戲(故事,區域等)之前創建了遊戲結構,所以我不知道我需要保存多少東西,如果我在創建這樣的數組時忘記了其中的一個對象,就很容易出錯。

有沒有什麼方法可以保存當前版本的「content.js」並讓用戶在保存後加載該版本?
(注:我沒有使用JQuery此項目)

+2

你有沒有考慮過使用變量保存到本地存儲或cookie? – Paul

+1

除非你想要一個玩家保存以影響_all_用戶,否則更新一個JS文件是沒有意義的。如果您想僅在該瀏覽器中爲該用戶存儲該數據,則應該使用localStorage。如果您希望用戶在其所使用的每臺設備上都有可用的更改數據,則需要將其存儲在服務器端,但需要爲每個用戶單獨存儲。 – CBroe

回答

1

你應該看看HTML5存儲:https://www.html5rocks.com/en/features/storage

你可以做這樣的事情:

var gamedata = localStorage.getItem("gamedata"); 
// modify your game state 
// ... 
localStorage.setItem("gamedata", gamedata); 

有一個簡單演示在http://html5demos.com/storage。您可以輸入數值,然後關閉窗口並在同一瀏覽器中的新窗口中打開,並顯示您以前的值。

+0

我存儲的對象非常複雜,它們包含其他對象,它們包含許多數組,有時還包含其中的函數,所以問題是當我嘗試將它們串化爲JSON時,JSON會拋出關於「圓形結構」的錯誤。除了完全重做我的遊戲並改變我存儲數據的方式外,我不知道如何將這些對象全部存儲起來。 – finnty

0

您應該明確區分應用程序的問題。 Javascript並不打算成爲存儲事物的地方。如果您不打算使用API​​來添加數據庫支持服務器端來存儲用戶進度,那麼Paul給出的提示就是最好的選擇。 LocalStorage是瀏覽器自己的數據庫,但要小心,因爲這可能不是永久性的 - 這同樣適用於cookie,因爲用戶可能會定期刪除這些數據。由於數據存儲在本地並且可以被編輯,所以存儲進度客戶端也可能允許作弊。同樣適用於在Cookie中存儲。

如果您有時間考慮使用serverside存儲。如果你不熟悉php或任何其他服務器端語言,請查看使用javascript serverside(node.js)並帶有mongo db的流星。這將明確地導致一個A +和打動你的老師:)

相關問題