【发布时间】:2020-10-10 18:02:28
【问题描述】:
我正在构建一个基于 Web 应用文本的 RPG 游戏。游戏将使用 textNodes 并在从问题中选择每个答案后移至下一个“问题”。
在我的游戏中,我将允许用户在游戏开始时选择特权。
其中一个好处是“润滑脂”。
这个游戏中有派系,我想检查玩家是否有加油员特权,并检查当前询问的问题是否包含派系“加油员”。
如果这两件事都是真的,我会运行相同的逻辑,但会减少伤害。如果没有,我会按照它出现的样子运行函数。
这是2个问题的代码,其中一个具有功能。
function addRadiatedStatus() {
character.radiated = true;
}
const textNodes = [
{
id: 1,
text: "Do you want to help this person?",
options: [
{
text: "Yes",
nextText: 2,
},
{
text: "No",
nextText: 2,
},
],
faction: "Greaser",
},
{
id: 2,
text: "It was a trap, do you run or kill them?",
options: [
{
text: "Run",
nextText: 3,
damage: 0,
},
{
text: "Kill",
nextText: 5,
damage: 8,
moneyDrop: 20,
radiationDamage: 2,
function: function update() {
if (character.greaser == true && textNodes[1].faction == "greaser") {
console.log("greaser check worked");
}
console.log("upadte function worked");
character.health -= this.damage;
character.cash += this.moneyDrop;
character.radiationLevel += this.radiationDamage;
character.maxHP -= this.radiationDamage;
if (this.radiationDamage >= 1) {
addRadiatedStatus();
}
console.log("character HP" + " " + character.health);
console.log("character maxHP" + " " + character.maxHP);
console.log("moneyDrop " + " " + this.moneyDrop);
console.log("character cash" + " " + character.cash);
console.log("radiation level" + " " + character.radiationLevel);
console.log("character Raditated?" + " " + character.radiated);
},
},
],
faction: "Greaser",
},
];
textNodes[1].options[1].function();
如您所见,我正在硬编码textNodes[1].faction,一旦我有数百个问题/选择,这将变得非常烦人。
我正在寻找一种方式来表达类似 `textNodes[textNodes.id].faction' 的内容,这样我就可以重用代码而无需硬编码。
我也对如何在问题选择/答案中自动调用任何函数感到困惑,因为目前,我正在对页面底部的函数调用进行硬编码,例如 textNodes[1].options[1].function()。
我希望能够做两件事...
-
只要玩家选择了选项,就会自动调用该函数
-
将 textNode ID 动态添加到 if/else 检查“greaser”。
我是 javascript 新手,我不知道为什么我无法从我的函数中获取密钥“id”。
提前致谢。
【问题讨论】:
-
好吧,只是为了简化,您无法从选项中提取该功能,对吧?它显示什么错误?
-
好吧,首先这对我来说是一个危险信号;每当您在数组中有一个对象时,最好为该对象定义一个类型,尝试获取其中一个对象中可能不存在的属性会让您头疼
-
@D1ZZYD23 没有我遇到的问题是指这个 if / else ...
if(character.greaser == true && textNodes[1].faction == "greaser"){ console.log("greaser check worked"); },问题是,我必须硬编码textNodes[1].faction,但我想动态添加 ID这个问题,这样我就不必硬编码了。我尝试了一些类似textNodes[this.id].faction的方法,但似乎无法正常工作。 -
@D1ZZYD23 另一个问题是,我现在正在对函数调用进行硬编码,但如果在游戏中选择了该文本节点,我希望函数自动运行(并且仅运行)。重点是每个问题选项都会附加一个函数,在游戏中选择该函数应该会自动调用该函数。我不确定这是否可能。
-
@ETHan 看看我更新的答案
标签: javascript object javascript-objects