【问题标题】:I can't seem to subtract one variable from another我似乎无法从另一个变量中减去一个变量
【发布时间】:2011-11-03 00:34:15
【问题描述】:

我正在开发一个简单的游戏,并且我已经完成了编码,以便当您单击攻击按钮时,它应该根据基础和力量生成一个随机数,然后从敌人的生命值中减去它,但是减法部分似乎不起作用。它总是输出NaN

<head>
    <script>
    var playerHealth=100;
    var enemyHealth=100;
    var strength=10;

    function begin(){
        document.getElementById('playerhealth').innerHTML = playerHealth;
        document.getElementById('enemyhealth').innerHTML = enemyHealth;
        }

    function hitEnemy(){
        var attack=Math.floor(Math.random()*20 + strength);
        var enemyHealth = enemyHealth - attack;
        document.getElementById('damage').innerHTML = attack;   
        document.getElementById('enemyhealth').innerHTML = enemyHealth;
        }

    </script>
</head>
<body onload="begin()">
        <input type="button" name="doit" id="doit" value="Attack!" onclick="hitEnemy();">
        <br /><span>playerhealth</span>
        <div style="font-size:3em;" id="playerhealth"></div>
        <span>enemyhealth</span>
        <div style="font-size:3em;" id="enemyhealth"></div>
        <br />
        <span>You Did:</span><span style="font-size:3em;" id="damage"></span><span>damage</span>

</body>

这可能与没有特别确保它们是整数有关,但我不知道该怎么做。

【问题讨论】:

    标签: javascript subtraction


    【解决方案1】:

    因为你在 hitEnemy 函数中重新定义了enemyHealth 变量。删除 var 以修复它。

     function hitEnemy(){
            var attack=Math.floor(Math.random()*20 + strength);
            enemyHealth = enemyHealth - attack;
            document.getElementById('damage').innerHTML = attack;   
            document.getElementById('enemyhealth').innerHTML = enemyHealth;
            }
    

    【讨论】:

      【解决方案2】:

      这是最直接的问题。您需要从hitEnemy 内部的enemyHealth 声明中删除var。这将创建一个名为 enemyHealth intsead 的新变量,用于修改第一个变量。

      enemyHealth = enemyHealth - parseFloat(attack);
      

      此外,您应该在每次hitEnemy 调用结束时调用begin 以更新分数。这是代码的工作版本

      【讨论】:

      • @user1026779 - 确保您接受 JaredPar 的回答。 :-) 谢谢!
      【解决方案3】:

      添加到 Jared 的回复中...

      var enemyHealth = enemyHealth - attack;
      

      是...的简写

      var enemyHealth;
      enemyHealth = enemyHealth - attack;
      

      首先,enemyHealth 定义为hitEnemy 范围内的undefined*。现在,存在 两个 名为 enemyHealth 的变量,但内部变量“遮蔽”了外部变量,因此无法引用外部变量。所以,从undefined 中减去attack,得到NaN

      *这听起来很荒谬,我知道

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-11
        • 2017-11-20
        • 2019-09-19
        • 1970-01-01
        • 1970-01-01
        • 2011-07-03
        • 2018-03-17
        相关资源
        最近更新 更多