首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在我的javascript代码中有奇怪的错误

在我的javascript代码中有奇怪的错误
EN

Stack Overflow用户
提问于 2013-11-25 00:34:28
回答 1查看 60关注 0票数 0

问题图片:http://puu.sh/5spfQ.png

我的第一个问题。我希望我能很好地解释这件事,让你知道我想做什么。

我正在开发一个小型的javascript游戏,其中唯一的目标是赚钱。赚钱的方法之一就是雇佣工人。不过,有个问题。例如,我们有Worker A、Worker B。由于一些奇怪的原因,每当B工人开采某样东西时,工人A也会接收到所开采的矿石(因此两者似乎都有相同数量的矿石)。我似乎搞不懂这是为什么,他们不应该互相收下矿石。

注意:>hired<工作人员存储在“雇用”变量中.

有趣的是,代码:

*此函数为每个可能雇用的员工填写已雇用变量的占位符。*

代码语言:javascript
运行
复制
    //add "placeholder data" to prevent future undefined/errors
    //and makes future modification easier, specially in workerMain()
    var o = [];
    for(ore in ores){o[ore] = 0;}

    for(w in workers){
        employed[w] = [0, o];
    }

因此,我们使用的变量可能看上去类似于:

('miner a‘=> [0,'coal_ore’=> 0,'diamond_ore‘=> 0],'miner b’=> [0,'coal_ore‘=> 0,'diamond_ore’=> 0])

现在一旦他们被雇用,每秒钟运行一次循环就可以确定他们开采了多少矿石,应该把任何工人开采的矿石放在他们各自的位置。

代码语言:javascript
运行
复制
function workerMain(){
    setTimeout(function(){
        for(e in employed){
            var wObj = workers[e];
            var orePerSecond = Math.ceil(wObj.opm/60)*employed[e][0];
            var oresMined = generateOres(orePerSecond, wObj.pickaxe);

            //add newly mined ore count to worker's ore
            for(ore in oresMined){
                employed[e][1][ore] += oresMined[ore];

                //we aren't storing the ore, so let's go ahead and sell it
                money += ores[ore].worth*oresMined[ore];
            }
        }

        updateValues();
        workerMain();
    }, 1000);
}

但是再一次,如果矿A开采一座煤矿,那么Miner B也会得到那种煤矿石。

希望我已经彻底地解释了我的问题。如果您似乎找不到这段代码中的问题,那么它可能存在于这些同级函数中:

http://pastebin.com/2WgT8Acg

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-25 00:39:22

Javascript中的数组和对象是通过引用传递的,因此在此代码中:

代码语言:javascript
运行
复制
var o = [];
for(ore in ores){o[ore] = 0;}

for(w in workers){
    employed[w] = [0, o];
}

您正在创建一个变量o并将对其的引用分配给每个miner。因此,每个矿商都在更新同一套矿石。

您需要为每个矿工创建一个新数组:

代码语言:javascript
运行
复制
var o;

for(w in workers){
    o = [];
    for(ore in ores){o[ore] = 0;}
    employed[w] = [0, o];
}

我敢说,一些Javascript大师可以做一个更有效的版本!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20183034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档