Ger*_*290 5 html javascript css html5
我想知道如何保存玩家在我正在制作的游戏中所取得的进步.我可以通过cookie或者如何保存到播放器计算机吗?感谢您的帮助!
Toa*_*gma 10
使用Javascript保存localy有两个选项,即cookies和localStorage.
该document.cookie属性用于设置,读取,更改和删除浏览器cookie.
document.cookie="cookiename=Foo Bar";或者如果您想要一个到期日期,请设置如下:document.cookie="cookiename=Foo Bar; expires=Mon, 18 Jan 2016 12:00:00 UTC";document.cookie将返回该页面上您网站的所有Cookie.它不会将它们放在数组中,而是将其格式化为单个字符串cookiename=foobar; nextcookiename=foobar;等.您可以轻松地将其转换为数组document.cookie.split("; ");新的HTML5 localStorage对象是另一种在本地存储数据的方法:
localStorage.setItem('itemname','contents');localStorage.getItem('itemname');.您可以使用"truthy"值检查项目是否存在(即if(localStorage.getItem('itemname')))localStorage.setItem上述方法更改localStorage项目.localStorage.removeItem('itemname').您可以想到的几乎任何浏览器都支持Cookie,但它们会过期(它们会在一段时间后被删除),也可能被用户禁用.就个人而言,我也发现document.cookie了一个笨重的界面.
另一方面,localStorage不能被用户轻易禁用,并为程序员提供了更易于访问的界面.据我所知,localStorage没有过期.由于localStorage是HTML5的新功能,因此它可能无法在某些旧版浏览器中使用(但它在新浏览器上有很大的覆盖率,请参阅http://caniuse.com/#feat=namevalue-storage).请注意,在整个网站上存储数据是有限制的,而不仅仅是针对一个项目.
最后,这取决于你.选择一个你认为最适合你游戏的游戏 - 如果你已经在使用其他HTML5内容(例如<canvas>),那么localStorage没有任何损害,你将使用更可靠的存储方法.但是,如果您对cookie感到满意,那么它们是成千上万非常受欢迎的网站使用的完美可行选项 - 有些甚至同时使用它们!Cookie的一个优点是它们可以由您的Web服务器访问,而localStorage则不能.
无论哪种方式,您都需要查看cookie法律,该法律通过Web应用程序影响用户计算机上的所有类型的存储.
这个问题最困难的部分不是找到一种保存数据的方法,而是以这样的方式设计游戏,让你有一个可以序列化以在会话之间保存的“游戏状态”。
\n\n想象一下,您正在编写一个带有玩家和分数的游戏,并且您使用两个变量来表示它们。
\n\nvar player = { x: 4, y: 3 };\nvar score = 10;\nRun Code Online (Sandbox Code Playgroud)\n\n使用 localStorage 保存这些变量相对容易。
\n\nfunction save() {\n localStorage.setItem(\'player\', JSON.stringify(player));\n localStorage.setItem(\'score\', JSON.stringify(score));\n}\n\nfunction load() {\n player = JSON.parse(localStorage.getItem(\'player\'));\n score = JSON.parse(localStorage.getItem(\'score\'));\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我们必须记住在存储之前将它们转换为 JSON,因为 localStorage 只能接受字符串值。
\n\n每次您使游戏状态变得更加复杂时,您都必须返回并编辑这两个函数。它还具有强制用全局变量表示游戏状态的不良效果。
\n\n另一种方法是用一个原子 \xe2\x80\x94 来表示整个状态,在本例中是一个 Javascript 对象。
\n\nvar state = {\n player: { x: 4, y: 3 },\n score: 10\n};\nRun Code Online (Sandbox Code Playgroud)\n\n现在您可以编写更直观的保存和加载函数。
\n\nvar SAVE_KEY = \'save\';\n\nfunction save(state) {\n localStorage.setItem(SAVE_KEY, JSON.stringify(state));\n}\n\nfunction load() {\n return JSON.parse(localStorage.getItem(SAVE_KEY));\n}\nRun Code Online (Sandbox Code Playgroud)\n\n此模式允许您将状态保留为局部变量并使用这些函数来处理它。
\n\nvar state = load();\nstate.score += 10;\nsave(state);\nRun Code Online (Sandbox Code Playgroud)\n\n实际上,在存储机制之间切换非常容易,但localStorage可能是最容易上手的。
\n\n对于小型游戏,您可能永远不会达到 5MB 大小限制,如果达到了,您还会发现同步JSON.stringify和localStorage.setItem操作会导致您的游戏在保存时冻结几秒钟。
如果这成为一个问题,那么您可能应该寻找一种更有效的方法来构建状态,并且可能考虑设计一种增量保存技术,针对IndexedDB而不是 localStorage。
\n