0

私はちょっとした楽しみのために小さなゲームを書いています。シンプルなターンベースのバトル ゲームで、ポケモン スタイルのバトルに似ていますが、愚かな/冗談のキャラクターが登場します。

ユーザー インターフェイスのメイン タイムラインにいくつかのものがありますが、それ以外はすべて外部アクション スクリプト ファイルで処理されます。攻撃などの戦闘関連のメソッドを持つ戦闘用のクラスがあり、インターフェイスから継承する独自のクラスとしてキャラクターも持っています。

私のユーザー インターフェースにはいくつかのボタンがあり、戦闘が始まると攻撃ボタンにイベント リスナーがあり、毎回次のコードを実行します。

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 セクションへ。

奇妙なのは、適切に機能する場合とそうでない場合がありますが、機能しないことが多いことです。

これが設定されている方法について根本的に愚かなことはありますか?

あなたの助けを前もってありがとう:)

4

1 に答える 1

7

このマシンにFlashがインストールされていないか、これが問題であるかどうかを確認しようとしますが、最初の推測では

! postAttackHp > 0

として評価してい(! postAttackHp) > 0ます。この場合、それはである場合にのみ当てはまりpostAttackHpます== 0! -10= Falseであるため、それ以外のものは、負の数であってもFalseと評価されます。False> 0はFalseです。これは、Falseを型キャストすると0のままになるためです。

どちらかを試してください、

if (! (postAttackHp > 0))

また

if (postAttackHp <= 0)
于 2012-05-29T21:36:37.753 に答える