私はちょっとした楽しみのために小さなゲームを書いています。シンプルなターンベースのバトル ゲームで、ポケモン スタイルのバトルに似ていますが、愚かな/冗談のキャラクターが登場します。
ユーザー インターフェイスのメイン タイムラインにいくつかのものがありますが、それ以外はすべて外部アクション スクリプト ファイルで処理されます。攻撃などの戦闘関連のメソッドを持つ戦闘用のクラスがあり、インターフェイスから継承する独自のクラスとしてキャラクターも持っています。
私のユーザー インターフェースにはいくつかのボタンがあり、戦闘が始まると攻撃ボタンにイベント リスナーがあり、毎回次のコードを実行します。
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 ステートメントはしばしばスキップ ダウンします。 else セクションへ。
奇妙なのは、適切に機能する場合とそうでない場合がありますが、機能しないことが多いことです。
これが設定されている方法について根本的に愚かなことはありますか?
あなたの助けを前もってありがとう:)