As3奇怪如果语句评估行为

时间:2012-05-29 21:31:40

标签: actionscript-3

我正在写一个小游戏,有点乐趣。这是一个简单的回合制战斗游戏,有点像口袋妖怪风格的战斗,但有愚蠢/笑话角色。

我在用户界面的主时间轴上有一些东西,但其他一切都在外部actionscript文件中处理。我有一个类的战斗,有一些与战斗相关的方法,如攻击等,我也有角色作为自己的类继承自接口。

在我的用户界面中有一些按钮,当战斗开始时,我的攻击按钮上有一个事件监听器,每次执行以下代码:

public function attack(attacker:Character, defender:Character):void
    {

        var defenderHp:int;
        var attackPower:int;
        var postAttackHp:int;

        defenderHp = defender.getHP();
        attackPower = attacker.getAttack();

        if (! passiveBlock(defender))
        {
            if (! criticalStrike(attacker))
            {
                trace("defender hp trace: " + (defenderHp - attackPower));
                postAttackHp = (defenderHp - attackPower);
            }
            else
            {
                trace("defender hp trace: " + Math.floor((defenderHp - (attackPower*1.5))));
                postAttackHp = Math.floor((defenderHp - (attackPower*1.5)));
                displayText = attacker.getName() + " landed a critical strike!";
            }

            if (! postAttackHp > 0)
            {
                gameIsOver(attacker, defender);
            }
            else
            {
                defender.setHP(postAttackHp);
            }
        }
        else
        {
            displayText = defender.getName() + " blocked the attack!";
        }

    }

每次按钮都会调用代码,问题在于if(!postAttackHp> 0)条件。出于某种原因,只有偶尔会在防御者的HP低于0时调用游戏方法。我每次跟踪postAttackHp变量,每次看到它低于0但是if语句经常会跳过到其他部分。

奇怪的是,有时候它会正常工作,有时却不能正常工作。

这种设置的方式是否存在根本性的愚蠢行为?

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:7)

我没有在这台机器上安装Flash,否则我会试着看看这是不是问题,但我的第一个猜测就是那个

! postAttackHp > 0

正在评估为(! postAttackHp) > 0。在这种情况下,postAttackHp== 0时才会出现这种情况。由于! -10 = False,任何其他内容,即使是负数,也会评估为False。假的> 0为False,因为类型转换为False会将其保留为0。

尝试其中之一,

if (! (postAttackHp > 0))

if (postAttackHp <= 0)