我正在写一个小游戏来获得一点乐趣。这是一个简单的回合制战斗游戏,有点像口袋妖怪风格的战斗,但有愚蠢/开玩笑的角色。
我在用户界面的主时间线上有一些东西,但其他一切都在外部动作脚本文件中处理。我有一个战斗类,它有一些与战斗相关的方法,如攻击等,我也有角色作为他们自己的类,它们从接口继承。
在我的用户界面中有一些按钮,当战斗开始时,我的攻击按钮上有一个事件监听器,每次都会执行以下代码:
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 时才会偶尔调用 game over 方法。我每次都在追踪 postAttackHp 变量,我每次都能看到它低于 0,但 if 语句往往会跳过到其他部分。
奇怪的是,有时它可以正常工作,有时不能正常工作,但更常见的是不工作。
这种设置方式有什么根本上愚蠢的吗?
在此先感谢您的帮助 :)