Actionscript 3 ActionScript3.0按下按钮后停止角色动画

Actionscript 3 ActionScript3.0按下按钮后停止角色动画,actionscript-3,flash,actionscript,character,Actionscript 3,Flash,Actionscript,Character,我有一个角色(我的英雄),他有几个动画,空闲,行走,转身,跳跃,攻击和舞蹈。 使用我现在使用的代码,我需要保持按钮按下,以使整个动画工作(这对于行走来说很好,但是当我想攻击时,例如,我希望按钮按下一次,整个动画也会播放一次) 现在,需要连续按下按钮才能播放动画。 这是我的代码: var keyRight:Boolean=false; var keyLeft:Boolean=false; var keyUp:Boolean=false; var keyAttack:Boolean=false; v

我有一个角色(我的英雄),他有几个动画,空闲,行走,转身,跳跃,攻击和舞蹈。 使用我现在使用的代码,我需要保持按钮按下,以使整个动画工作(这对于行走来说很好,但是当我想攻击时,例如,我希望按钮按下一次,整个动画也会播放一次) 现在,需要连续按下按钮才能播放动画。 这是我的代码:

var keyRight:Boolean=false;
var keyLeft:Boolean=false;
var keyUp:Boolean=false;
var keyAttack:Boolean=false;
var keyDance:Boolean=false;


myHero.gotoAndStop(1);//the idle animation

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown_Handler)
function keyDown_Handler(event:KeyboardEvent):void
{

    if(event.keyCode == Keyboard.X)
    {
        keyAttack=true;
    }
//theres more code for the other keys all similar to this

}

stage.addEventListener(KeyboardEvent.KEY_UP, keyUp_Handler)
function keyUp_Handler(event:KeyboardEvent):void
{

    if(event.keyCode == Keyboard.X)
    {
        myHero.gotoAndStop(1);//the idle animation
        keyAttack=false;
    }
//theres more code for the other keys all similar to this

}
有了这个,我不得不继续按下键。因此,我尝试将此添加到按键工具中:

if(event.keyCode == Keyboard.X)
{
    if(myHero.Attack.currentFrame==8)//the animation is 8 frames long
    {
        myHero.gotoAndStop(1);//the idle animation
        keyAttack=false;
    }   
}
但现在,当我按下该键时,动画将永远循环,除非我用另一个键取消它。我还尝试添加了stop();到动画的最后一帧,但它只是在最后一帧冻结,不会像我希望的那样返回到空闲状态


有什么帮助吗?

对于要按下和释放并完成动画的任何键盘键,可以做的一个选项是只设置布尔值,而不告诉动画转到空闲帧。因此,对于攻击密钥,只需将keyAttack布尔值设置为false

stage.addEventListener(KeyboardEvent.KEY_UP, keyUp_Handler)
function keyUp_Handler(event:KeyboardEvent):void
{

    if(event.keyCode == Keyboard.X)
    {
        keyAttack=false;
    }
//theres more code for the other keys all similar to this

}
然后在动画(MovieClip)中,您可以在攻击的8帧结尾处有一段代码,用于检查布尔值是否为false。我假设攻击动画位于上面示例文本中名为myHero的MovieClip中

// At the last frame of the attack animation inside myHero.Attack
if (MovieClip(this.parent.parent).keyAttack == false){
   // Assumming that this.parent = myHero
   // and this.parent.parent = the main stage where keyAttack varable lives
    MovieClip(this.parent).gotoAndStop(1); // though I would use a frame label called ("idle")
} else {
    this.gotoAndPlay(1); // replay attack animation assuming that the X key is still pressed down
}

我不清楚你到底是如何开始攻击动画的?(按X键进入空闲帧,然后将
keyAttack
设置为'false'。请澄清你的英雄的结构,看起来你有一个叫做攻击的儿童电影剪辑?myHero有6个不同的关键帧,其中包含不同的动画。那么每个关键帧都是由不同的按钮触发的,如果这有意义的话?我设置了布尔值,这样当按下键时,它是真的,当它没有按下时,它是假的。我想他想要一些处理动画状态的东西。播放攻击动画->攻击动画结束时->播放IDLE我不知道的是如何启动攻击动画,因为在示例中代码没有告诉攻击动画播放。另外,请注意,这仅适用于您希望一次按下即可播放完整动画直到完成的关键点。感谢您的回复@kminke!我已将代码放入程序中,但现在收到一个错误(1119:通过引用静态类型flash.display:Stage访问可能未定义的属性keyAttack),它突出显示这一行:if(Stage.keyAttack==false);我对AS3比较陌生,所以我觉得一切都很混乱。抱歉,在我的代码示例中,我假设您的变量设置在主时间线上。什么对象设置了keyAttack布尔变量?keyAttack是独立的,没有任何对象,因为我已经编辑了我以前的答案,现在我有时间回到程序中并尝试一些东西。您可以尝试使用parent.parent访问主时间线(或阶段)以验证keyAttack布尔值,但您必须确保将父级转换为MovieClip,就像我在上面的回答中所做的那样。请让我知道这是否适合你。