as3 flash中的攻击动画问题

Posted

技术标签:

【中文标题】as3 flash中的攻击动画问题【英文标题】:Attack animation issue in as3 flash 【发布时间】:2016-09-11 17:24:53 【问题描述】:

我的问题是,当我按下空格键时,它会播放攻击动画,但一旦我松开它,它就会停止动画过程。我想要它,我可以简单地按下并释放按钮,然后它会自行完成动画。

function keyPressed(e:KeyboardEvent):void
    
        if(e.keyCode == Keyboard.RIGHT)
          
             rDown = true;  
          
        if(e.keyCode == Keyboard.LEFT)
          
             lDown = true;
          
        if(e.keyCode == Keyboard.UP && onGround)
          
             jumped = true;
          
        if(e.keyCode == Keyboard.DOWN && onGround)
          
             crouchMode = true; 
          
        if(e.keyCode == Keyboard.SPACE && onGround)
          
              attackMode = true;

          
    
    function keyReleased(e:KeyboardEvent):void
    
        if(e.keyCode == Keyboard.RIGHT)
          
             rDown = false; 
          
        if(e.keyCode == Keyboard.LEFT)
          
             lDown = false;  
          
        if(e.keyCode == Keyboard.UP)
          
             jumped = true;  
          
        if(e.keyCode == Keyboard.DOWN)
          
             crouchMode = false; 
          
        if(e.keyCode == Keyboard.SPACE)
          
             attackMode = false; 
          
    
    function gameLoop(e:Event):void
       
        playerStart();

                
        
    
    function playerStart():void
    
        warMage.y += grav;//Apply gravity to player

        collisionStageCheck();

        if(crouchMode)
        
            warMage.gotoAndStop("CrouchWarmage");
            rDown = false;
            lDown = false;
        
        if(attackMode)
        

            if(warMage.scaleX == 1)//If we face right
            
              warMage.x += 5;//Lunge right
            
            if(warMage.scaleX == -1)//If we face left
            
              warMage.x -= 5;//Lunge left   
            
            warMage.gotoAndPlay("AttackWarmage");
        
        if(rDown)//If we move right
        
           warMage.x += 12;
           warMage.gotoAndStop("RunWarmage");
           warMage.scaleX = 1;
        
        if(lDown)//If we move left
        
           warMage.x -= 12;
           warMage.gotoAndStop("RunWarmage");
           warMage.scaleX = -1;
        
        if(jumped)//If we jumped
        
           warMage.y -= 30;
           warMage.gotoAndStop("JumpWarmage");
        
        if(!rDown && !lDown && !jumped && !crouchMode && !attackMode)//If we are in neither states
        
            warMage.gotoAndStop("idleWarmage");
        
    

【问题讨论】:

看起来这正是您的代码应该做的(if(!rDown && !lDown && !jumped && !crouchMode && !attackMode) 将动画切换到空闲状态),如果释放空格键,您可以保持attackMode 处于打开状态,它应该会有所帮助。 当我释放攻击模式时,它永远不会停止,我试图寻找另一个信号来说明它什么时候应该是假的。喜欢控制动画,但很难找到其他任何东西 尝试在AttackWarmage的最后一帧添加gotoAndStop("idleWarmage") 不起作用:L。有没有办法在attackMode为真时控制动画,这样我就可以在不释放密钥的情况下禁用它? 【参考方案1】:

攻击动画未完成,因为attackMode 在空格键keyReleased 函数上被设置为false。不要那样做。相反,在动画的最后一帧设置attackMode false。在嵌套在 if (attackMode) 逻辑块内的 Main 类中执行此操作:

if (heroMage.currentFrame == "LastFrame") 

    attackMode = false;

显然你会将攻击动画的最后一帧命名为“LastFrame”。

我还发现了一种更优雅的方法here,使用eventDispatcher,它消除了检查当前帧的需要,但增加了在影片剪辑时间轴中包含代码的轻微麻烦(在我看来)。

【讨论】:

有没有办法通过我的主类访问攻击动画时间线? 我添加了一种使用 .currentFrame 在主时间线中完成所有操作的方法。

以上是关于as3 flash中的攻击动画问题的主要内容,如果未能解决你的问题,请参考以下文章