0

問題は、ゲーム内の戦闘機に問題があることです。KEY_DOWN イベントおよび/または ENTER_FRAME を使用すると、キックまたはパンチ ボタンを押したままにすると、ファイターは継続的に敵にダメージを与えますが、たとえば、キックしてから静止位置に戻るか、キックしてからできるようにしたいです。位置を保持しますが、ダメージを与えるのは 1 回だけです。ここにいくつかのコードがあります:

stage.addEventListener(KeyboardEvent.KEY_DOWN, enterAttack);
stage.addEventListener(KeyboardEvent.KEY_UP, exitAttack);
stage.addEventListener(Event.ENTER_FRAME, attackYes);
stage.addEventListener(Event.EXIT_FRAME, attackNo);

function enterAttack(evt:KeyboardEvent):void
{
    if (evt.keyCode == 84)
    {
        attack = true;
    }
}
function exitAttack(evt:KeyboardEvent):void
{
    attack = false;
}
function attackYes(evt:Event):void
{
    if (attack)
    {
        hero.gotoAndStop("punch1");

        checkHitRed();
        checkIfDead();
    }
}
function attackNo(evt:Event):void
{
    if (!attack)
    {
        hero.gotoAndStop("still");
    }
}

どこかでリスナーを削除しようとしていましたが、それは常に戦闘機が攻撃をしていないように見えました.

キック/パンチボタンを長押ししないようにする方法はありますか?

どんな助けでも大歓迎です

4

2 に答える 2

0

キャラクターの状態は、3タイプに分かれます。次のように。

stage.addEventListener(KeyboardEvent.KEY_DOWN, enterAttack);
stage.addEventListener(KeyboardEvent.KEY_UP, exitAttack);
stage.addEventListener(Event.ENTER_FRAME, onAction);

var characterState:String = "wait"
function enterAttack(evt:KeyboardEvent):void
{
    if (evt.keyCode == 84)
    {
        characterState = "attack";
    }
}
function exitAttack(evt:KeyboardEvent):void
{
    characterState = "attack_ended";
}
function onAction(evt:Event):void
{
    if(characterState == "wait") return;

    if(characterState == "attack")
    {
        hero.gotoAndStop("punch1");

        checkHitRed();
        checkIfDead();
    }
    else if(characterState == "attack_ended")
    {
        hero.gotoAndStop("still");
        //Revert to wait state after the attack termination .
        characterState = "wait";
    }
}
于 2013-02-12T01:32:25.117 に答える