As3奇怪如果语句评估行为

Jam*_*mas 0 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!";
        }

    }
Run Code Online (Sandbox Code Playgroud)

每次按钮都会调用代码,问题在于if(!postAttackHp> 0)条件.出于某种原因,只是偶尔做这款游戏的方式得到,当后卫的HP低于0.我跟踪postAttackHp变量每次出去,我可以看到每一个它是小于0的时间,但if语句往往不是跳过了一个名为到其他部分.

奇怪的是,有时候它可以正常工作,有时它不会,但它经常不起作用.

这个设置的方式有什么根本愚蠢的东西吗?

在此先感谢您的帮助 :)

sbe*_*rry 7

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

! postAttackHp > 0
Run Code Online (Sandbox Code Playgroud)

正在评估为(! postAttackHp) > 0.在这种情况下,它只会如果是真的postAttackHp== 0.其他任何东西,甚至是负数,都会评估为False,因为! -10= False.False> 0为False,因为类型转换为False会将其保留为0.

试试,

if (! (postAttackHp > 0))
Run Code Online (Sandbox Code Playgroud)

要么

if (postAttackHp <= 0)
Run Code Online (Sandbox Code Playgroud)