在javascript中,如何获得仅在必要时更新的状态?
我正在尝试创建第五版D&D角色生成器应用程序(我知道,超级书呆子)。我试着根据角色所处的级别来问一些问题。现在我希望它只更新信息,而不是重新搜索所有相同的信息。例如,如果一个角色是一级的游侠,它会询问他喜欢的地形和喜欢的敌人。如果我让角色升到2级,它将重新问这些问题,并问下一个与2级相关的问题。我如何用第二级收集的信息进行更新,等等 我相信这个问题也将回答我如何更新经验点,而不必反复问同样的问题。如果没有,那就是我的下一个问题 谢谢 以下是相关代码的示例:在javascript中,如何获得仅在必要时更新的状态?,javascript,Javascript,我正在尝试创建第五版D&D角色生成器应用程序(我知道,超级书呆子)。我试着根据角色所处的级别来问一些问题。现在我希望它只更新信息,而不是重新搜索所有相同的信息。例如,如果一个角色是一级的游侠,它会询问他喜欢的地形和喜欢的敌人。如果我让角色升到2级,它将重新问这些问题,并问下一个与2级相关的问题。我如何用第二级收集的信息进行更新,等等 我相信这个问题也将回答我如何更新经验点,而不必反复问同样的问题。如果没有,那就是我的下一个问题 谢谢 以下是相关代码的示例: if (level >= 1){
if (level >= 1){
var favTerrain1 = prompt("Name your favorite terrain.");
var favEnemy1 = prompt("Name your favorite enemy type or 2 humanoid races. (If you select the latter, please separate with a comma.)");
document.getElementById("level1").innerHTML = "<h4><b> Favored Terrain: </b>" + favTerrain1 + "<br><b>Favored Enemy(Enemies): </b>" + favEnemy1 + "</h4>";
}
if (level >= 2) {
var lv2 = +prompt("Choose fighting style: 1. Archery 2. Defense 3. Dueling 4. Two-Weapon Fighting");
var level2;
switch(lv2){
case 1:
level2 = "<b>Archery</b> You gain +2 bonus attack rolls you make with ranged weapons.";
break;
case 2:
level2 = "<b>Defense</b> While you are wearing armor, you gain a +1 to armor class.";
armorClass = armorClass + 1;
break;
case 3:
level2 = "</b>Dueling</b> When you are wielding a melee weapon and no other weapons, you gain a +2 bonus to damage rolls with that weapon.";
break;
case 4:
level2 = "<b>Two-Weapon Fighting</b> When you engage in two-weapon fighting, you can add your ability modifier to the damage of the second attack.";
break;
}
} else {
level2= " ";
}
如果(级别>=1){
var favTerrain1=提示(“命名您最喜欢的地形”);
var favEnemy1=prompt(“说出你最喜欢的敌人类型或2个人形种族(如果选择后者,请用逗号分隔)。”;
document.getElementById(“level1”).innerHTML=“有利地形:+favTerrain1+”
有利敌人:“+favEnemy1+”;
}
如果(级别>=2){
var lv2=+提示(“选择战斗方式:1.射箭2.防御3.决斗4.双武器战斗”);
风险等级2;
开关(lv2){
案例1:
level2=“射箭获得+2点远程武器攻击骰加值。”;
打破
案例2:
level2=“当你穿着护甲时,你获得+1护甲等级。”;
装甲等级=装甲等级+1;
打破
案例3:
level2=“当你使用近战武器而没有其他武器时,你使用该武器获得+2伤害骰加值。”;
打破
案例4:
level2=“双武器战斗当你进行双武器战斗时,你可以在第二次攻击的伤害中增加你的能力调整值。”;
打破
}
}否则{
级别2=“”;
}
如果我将级别从1升级到2,它将同时询问级别1和级别2的问题集。通过构建角色,您正在以最经典的方式创建一个对象:角色具有许多属性,这些属性随着级别的提高而构建 要仅提示用户所需的问题,您可以检查
player
对象是否已经具有您将在该级别通过函数获得的属性
所以你可以用
var player = new Object();
player.favoredTerrain = "jungle";
if (!player.hasOwnProperty('favoredMount')){
//whatever your code is to ask for the favored mount
};
if (!player.hasOwnProperty('favoredTerrain')){
//whatever code in here won't run because he has a favored Terrain already!
};
请注意,许多框架将使这样的事情更容易在一个大的值列表上进行,例如Angular的测试,以查看是否填充了X值,然后隐藏/取消隐藏问题。或者,JQuery将使您能够轻松地选择和隐藏您已经回答的问题块。由于您的问题是“我如何使用Javascript实现这一点”,因此我尝试通过构建角色来提供“纯”版本,您正在以最经典的方式创建一个对象:角色具有许多属性,这些属性随着级别的提高而构建 要仅提示用户所需的问题,您可以检查
player
对象是否已经具有您将在该级别通过函数获得的属性
所以你可以用
var player = new Object();
player.favoredTerrain = "jungle";
if (!player.hasOwnProperty('favoredMount')){
//whatever your code is to ask for the favored mount
};
if (!player.hasOwnProperty('favoredTerrain')){
//whatever code in here won't run because he has a favored Terrain already!
};
请注意,许多框架将使这样的事情更容易在一个大的值列表上进行,例如Angular的测试,以查看是否填充了X值,然后隐藏/取消隐藏问题。或者,JQuery将使您能够轻松地选择和隐藏您已经回答的问题块。由于您的问题是“我如何使用Javascript实现这一点”,我尝试给“纯”版本提供一个指向您当前使用的一些代码的链接,这会很有帮助,因为我不是100%清楚您是否已经遇到了这个问题或只是在计划阶段。用示例代码更新了问题。哈哈,当你添加代码时,我正在写我的答案。非常感谢。我想我的答案仍然足够。实际上,我不确定您是如何在代码片段中构建角色信息对象的,但如果我的答案需要更详细的信息以适合您的代码,请告诉我。指向您当前使用的一些代码的链接会很有帮助,因为我不是100%清楚你是否已经遇到了这个问题,或者只是在计划阶段。更新了问题的示例代码。哈,在你添加代码时正在写我的答案。非常感谢。我想我的答案仍然足够。我不确定你是如何在你的代码片段中构建你的角色信息对象的,但是如果我的答案需要更多的细节来适应你的代码,请告诉我。这似乎不起作用。它不断重复同样的问题。如果我尝试其中一个框架,可能会有所帮助,但我对它们了解不多。这个部门有什么帮助吗?这好像不管用。它不断重复同样的问题。如果我尝试其中一个框架,可能会有所帮助,但我对它们了解不多。这个部门有什么帮助吗?