我在基于沙盒的游戏中有两个变量。
blocks
(数组)
和
blockssave
(也是数组)
但我也有这些功能:
var game = {
blocksave: function() {
blockssave = blocks;
blockserasedsave = blockserased;
},
blockload: function() {
blocks = blockssave;
blockserased = blockserasedsave;
},
blockreset: function() {
blocks = [];
blockserased = 0;
}
}
如果我一次调用blockave,它会一直保存,直到我重置 因此,如果我保存然后继续构建然后加载,加载的世界就像我保存并建立更多。但是,如果我重置,它将停止保存,直到我game.blockload()。我甚至尝试在按钮上单击定义的功能。
我查看了我的代码,只有在按下按钮时才会调用save函数。 (我测试过了)
唯一的线索就是一遍又一遍地调用一个函数来运行游戏。 (保存不在里面)
答案 0 :(得分:1)
blockssave = blocks
不会复制数组。它只是将blockssave引用指向相同的块数组。
如果数组的元素是基元,则可以快速制作块数组的浅表副本,如下所示:
blockssave = blocks.slice(0);
如果元素是对象,那么你需要通过循环遍历它并为每个元素创建一个新对象来深度复制数组。