Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 战斗机游戏as3,键盘问题event.KEY\u关闭_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 战斗机游戏as3,键盘问题event.KEY\u关闭

Actionscript 3 战斗机游戏as3,键盘问题event.KEY\u关闭,actionscript-3,flash,Actionscript 3,Flash,问题是我在比赛中遇到了与拳击手的麻烦。如果我使用“向下键”事件和/或“进入”帧,当我按下“踢”或“打孔”按钮时,战斗机会持续对敌人造成伤害,但我希望他能够这样做,例如踢,然后返回到静止位置或踢,并且能够保持该位置,但只造成一次伤害。下面是一些代码: stage.addEventListener(KeyboardEvent.KEY_DOWN, enterAttack); stage.addEventListener(KeyboardEvent.KEY_UP, exitAttack); stage.

问题是我在比赛中遇到了与拳击手的麻烦。如果我使用“向下键”事件和/或“进入”帧,当我按下“踢”或“打孔”按钮时,战斗机会持续对敌人造成伤害,但我希望他能够这样做,例如踢,然后返回到静止位置或踢,并且能够保持该位置,但只造成一次伤害。下面是一些代码:

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");
    }
}
我试着在某个地方删除侦听器,但这总是让它看起来好像战斗机没有进行任何攻击

有没有办法防止按下“踢/打”按钮


任何帮助都是非常感谢的

字符状态,分为三种类型。具体如下

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";
    }
}

你必须为你的能力设计冷却时间,例如“踢”每20帧只能发生一次。因此,当玩家按下kick按钮时,char进行踢击,造成伤害,并设置冷却变量。Enter frame listener开始减少计数器,并且在冷却处于活动状态时忽略后续的kick命令

stage.addEventListener(KeyboardEvent.KEY_DOWN, enterAttack);
stage.addEventListener(Event.ENTER_FRAME, enterFrame);
var kickCooldown:int=0;
function enterAttack(evt:KeyboardEvent):void
{
    if (evt.keyCode == 84)
    {
        if (!kickCooldown) {
            attack = true;
            kickCooldown=15;
        }
    }
}
function enterFrame(evt:Event):void
{
    if (attack)
    {
        hero.gotoAndStop("punch1");
        attack=false; // we have attacked once, now dealing damage
        checkHitRed();
        checkIfDead();
    }
    if (kickCooldown>0) kickCooldown--; // waiting for cooldown end
    else hero.gotoAndStop("still"); // if ends, return hero to "still" posture
}

你为什么不直接在键盘上点击一下呢?这自然会造成两次点击之间的延迟。谢谢你们的快速回复,维斯珀这正是我所需要的,非常感谢!