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中的攻击动画问题的主要内容,如果未能解决你的问题,请参考以下文章

浏览器 (html) 中的 Flash AS3 调试动画?

Flash AS3 脚本化眼睛不与其他图层动画进行补间

Flash CS4 AS3 水平动画剪辑滚动鼠标移动

高分求一个 flash as3.0的关于鼠标拖曳startDrag() 方法后 怎么获取拖曳后的坐标!!做凹透镜原理动画!

如何在 Flash AS3 中通过鼠标单击暂停多个符号

如何设置和使用 Flash AS3 文件