Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中,如何获得仅在必要时更新的状态?_Javascript - Fatal编程技术网

在javascript中,如何获得仅在必要时更新的状态?

在javascript中,如何获得仅在必要时更新的状态?,javascript,Javascript,我正在尝试创建第五版D&D角色生成器应用程序(我知道,超级书呆子)。我试着根据角色所处的级别来问一些问题。现在我希望它只更新信息,而不是重新搜索所有相同的信息。例如,如果一个角色是一级的游侠,它会询问他喜欢的地形和喜欢的敌人。如果我让角色升到2级,它将重新问这些问题,并问下一个与2级相关的问题。我如何用第二级收集的信息进行更新,等等 我相信这个问题也将回答我如何更新经验点,而不必反复问同样的问题。如果没有,那就是我的下一个问题 谢谢 以下是相关代码的示例: if (level >= 1){

我正在尝试创建第五版D&D角色生成器应用程序(我知道,超级书呆子)。我试着根据角色所处的级别来问一些问题。现在我希望它只更新信息,而不是重新搜索所有相同的信息。例如,如果一个角色是一级的游侠,它会询问他喜欢的地形和喜欢的敌人。如果我让角色升到2级,它将重新问这些问题,并问下一个与2级相关的问题。我如何用第二级收集的信息进行更新,等等

我相信这个问题也将回答我如何更新经验点,而不必反复问同样的问题。如果没有,那就是我的下一个问题

谢谢

以下是相关代码的示例:

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%清楚你是否已经遇到了这个问题,或者只是在计划阶段。更新了问题的示例代码。哈,在你添加代码时正在写我的答案。非常感谢。我想我的答案仍然足够。我不确定你是如何在你的代码片段中构建你的角色信息对象的,但是如果我的答案需要更多的细节来适应你的代码,请告诉我。这似乎不起作用。它不断重复同样的问题。如果我尝试其中一个框架,可能会有所帮助,但我对它们了解不多。这个部门有什么帮助吗?这好像不管用。它不断重复同样的问题。如果我尝试其中一个框架,可能会有所帮助,但我对它们了解不多。这个部门有什么帮助吗?