【问题标题】:variable keeps getting updated without any code that says to变量不断更新,没有任何代码说明
【发布时间】:2015-07-01 21:19:38
【问题描述】:

我在基于沙盒的游戏中有两个变量。

blocks

(数组)

blockssave

(也是数组)

但我也有这些功能:

var game = {
    blocksave: function() {
        blockssave = blocks;
        blockserasedsave = blockserased;
    },
    blockload: function() {
        blocks = blockssave;
        blockserased = blockserasedsave;
    },
    blockreset: function() {
        blocks = [];
        blockserased = 0;
    }
}

如果我调用 blocksave 一次,它会一直保存直到我重置 所以如果我保存然后继续构建然后加载,加载的世界就像我保存并构建更多之后一样。但是,如果我重置,它会停止保存,直到我 game.blockload()。我什至尝试了在按钮 onclick 中定义的功能。

我查看了我的代码,只有在按下按钮时才会调用保存函数。 (我测试过)

唯一的线索是一个函数被一遍又一遍地调用来运行游戏。 (save不在里面)

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    blockssave = blocks 不复制数组。它只是将 blocksave 引用指向同一个 blocks 数组。

    如果数组的元素是基元,您可以像这样快速制作块数组的浅表副本:

    blockssave = blocks.slice(0);

    如果元素是对象,那么您需要通过循环遍历数组并为每个元素创建一个新对象来深度复制该数组。

    【讨论】:

    • 我一定会尝试的!谢谢!
    • 代码现在是:var game = { blocksave: function() { blocksave = blocks.slice(0);块擦除保存 = 块擦除; },块加载:函数(){块=块save.slice(0);块擦除 = 块擦除保存; }, blockreset: function() { blocks = [];块擦除 = 0; } } 但它仍然没有工作
    • 数组的元素是什么?如果它们是对象或其他数组,则需要使用循环进行深度复制。
    猜你喜欢
    • 2014-08-01
    • 2012-06-25
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2017-06-19
    • 2012-08-04
    • 2013-09-12
    • 2017-01-23
    相关资源
    最近更新 更多