我提前为标题道歉,我在调试时找不到我一直在寻找的东西,但我可能不知道要搜索的正确术语。
我有以下对象:
const Game = {
user: {
tool: {
displayName: "shovel",
level: 0,
max: 1,
},
backpack: {
level: 0,
max: 10,
contents: {
ice: 5,
}
}
},
locations: {
lifePod: {
displayName: "Life Pod",
loseOxygen: false
},
icyPlain: {
displayName: "Ice Plain",
loseOxygen: true,
materials: {
type: "ice",
}
},
metalPlain: {
displayName: "Metal Plain",
loseOxygen: true,
materials: {
type: "metal",
}
}
}
};
我想使用以下功能将冰中物品的数量增加1.这可以100%正确地工作,但是当我尝试使用"金属"相反,它只允许最多2个。
function mineResource(locationName) {
let newLocation = Game.locations[locationName];
if (Game.user.currentLocation != "lifePod" && newLocation.materials != undefined && backpackNotFull()) {
var alreadyInserted = false;
materialType = newLocation.materials.type; //ice
materialAmount = Game.user.tool.max; //1
let {backpack} = Game.user;
if (backpack.contents != null || backpack.contents != undefined) {
for (item in backpack.contents) {
if (item == materialType) {
Game.user.backpack.contents[materialType] += Game.user.tool.max;
alreadyInserted = true;
refreshValues();
} else if (alreadyInserted) {
null;
} else {
Game.user.backpack.contents[materialType] = materialAmount;
refreshValues();
}
};
};
};
}
我很困惑这个功能可以很好地使用Ice而不是Metal。作为测试我改变了:
contents: {
ice: 5,
}
为:
contents: {
ice: 5,
metal: 5,
}
并且调用Game.user.backpack.contents仅显示{ice:5}并且调用contents.metal未定义。我当然得救了,精神焕发。不幸的是,因为我是初学者,所以我不知道自己不知道什么,并且很难找到它。我有一个把控制台日志放在" if(item == materialType){"他们正在输出,但没有增加柜台。
上的整个代码 编辑:我刚刚删除Ice,并将金属默认为5,现在Metal正常上升1,但如果我添加Ice就像我添加金属一样,Ice现在只增加到2。答案 0 :(得分:0)
当您添加金属但添加金属时,您需要添加金属
} else {
Game.user.backpack.contents[materialType] = materialAmount; // remove this line
refreshValues();
}
因此,当开采金属时,你会做内容['metal'] = 1(在冰循环上)和后来的内容['metal'] + = 1(在金属循环上)...因为你在项目上循环设置内容[项目]。但是我确定你不想在挖掘metalPlain时设置内容['ice'] = 1,所以只需删除这一行。