我想知道如何保存玩家在我正在制作的游戏中所取得的进步。我可以通过cookie或者如何保存到播放器计算机吗?感谢您的帮助!
答案 0 :(得分:8)
使用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')
删除localStorage项目。几乎所有您能想到的浏览器都支持Cookie,但它们会过期(它们会在一段时间后被删除),也可能被用户禁用。就个人而言,我也发现document.cookie
是一个笨重的界面。
最后,它取决于你。选择您认为最适合您游戏的游戏 - 如果您已经使用其他HTML5内容(例如<canvas>
),那么localStorage就没有任何损害,您就可以了使用更可靠的存储方法。但是,如果您对cookie感到满意,那么它们是成千上万非常受欢迎的网站使用的完美可行选项 - 有些甚至同时使用它们! Cookie的一个优点是它们可以被您的Web服务器访问,而localStorage则不能。
无论哪种方式,您都需要查看a limit,它会通过网络应用程序影响用户计算机上的所有类型的存储空间。
答案 1 :(得分:4)
这个问题中最困难的部分并不是找到一种方法来保存数据,而是设计游戏的方式使你拥有一个游戏状态&#34;可以序列化以便在会话之间保存。
想象一下,你正在用一个玩家和一个分数来编写一个游戏,并且你正在使用两个变量来表示它们。
var player = { x: 4, y: 3 };
var score = 10;
使用localStorage保存这些变量相对容易。
function save() {
localStorage.setItem('player', JSON.stringify(player));
localStorage.setItem('score', JSON.stringify(score));
}
function load() {
player = JSON.parse(localStorage.getItem('player'));
score = JSON.parse(localStorage.getItem('score'));
}
我们必须记住在存储之前将它们转换为JSON,因为localStorage只能接受字符串值。
每当您使游戏状态变得更复杂时,您必须返回并编辑这两个功能。它还具有强制游戏状态用全局变量表示的不良影响。
另一种方法是用一个原子表示整个状态 - 在本例中是一个Javascript对象。
var state = {
player: { x: 4, y: 3 },
score: 10
};
现在您可以编写更直观的保存和加载功能。
var SAVE_KEY = 'save';
function save(state) {
localStorage.setItem(SAVE_KEY, JSON.stringify(state));
}
function load() {
return JSON.parse(localStorage.getItem(SAVE_KEY));
}
此模式允许您将状态保持为局部变量,并使用这些函数来处理它。
var state = load();
state.score += 10;
save(state);
实际上,在存储机制之间切换非常容易,但localStorage可能是最容易上手的。
对于小型游戏,您可能永远不会达到5MB的大小限制,如果您这样做,那么您还会发现同步JSON.stringify
和localStorage.setItem
操作会导致您的每当你保存时,游戏都会冻结几秒钟。
如果这成为一个问题,那么你应该寻找一种更有效的方法来构建你的状态,并考虑设计一种增量保存技术,目标是IndexedDB而不是localStorage。
答案 2 :(得分:1)
这实际上取决于你在寻找什么。 Cookie是存储数据的绝佳方式,但可以由客户端进行编辑,某些浏览器可以使用Cookie。
网络存储也有它的商品和坏处。如果您的游戏必须编写大量数据并且拥有大量播放器,它将很快耗尽您的带宽,并且可能还需要时间来转移,具体取决于客户端连接。好处是它完全可以控制。数据发送后,客户端无法编辑。
Javascript有一些很棒的文件I / O工具可以帮助你。这是一个很棒的教程:https://developer.mozilla.org/en-US/Add-ons/Code_snippets/File_I_O
如果你决定使用cookies,根据你的技能,它会变得更难或更容易。同样,这是一个很棒的教程:http://www.w3schools.com/js/js_cookies.asp。
希望这有帮助!!!
编辑--- 当我提到客户时我真的想说玩家:D