【问题标题】:AS3 Attack Animation IssuesAS3 攻击动画问题
【发布时间】:2013-08-04 23:21:46
【问题描述】:

我正在尝试创建一个节拍游戏,现在我的角色正在攻击。到目前为止,我有 3 个攻击动画并且几乎可以工作。如果你继续捣碎攻击按钮,它会攻击,但问题是一旦攻击按钮被按下,它就会进入下一个攻击动画,我不希望那样。当前攻击动画完成后,如何使其转到下一个攻击动画,而不是在当前动画的中途跳到下一帧。所以我希望角色完成它的攻击,如果玩家仍然键入攻击键,它将进入下一个攻击帧。

package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class Player extends MovieClip
    {
        //Attack variables
        var Attacking:Boolean = false;
        var Punches:int = 0;
        var Punching:Boolean = false;
        var Kicks:int = 0;
        var Kicking:Boolean = false;

        public function Player()
        {
            stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyPressed);
            addEventListener(Event.ENTER_FRAME,Update);
        }

        function KeyPressed(event:KeyboardEvent):void
        {
            stage.removeEventListener(KeyboardEvent.KEY_DOWN, KeyPressed);
            stage.addEventListener(KeyboardEvent.KEY_UP, KeyUp);

                //If A key is down
                if (event.keyCode == 65)
                {
                    Attacking = true;
                    Punching = true;
                    Punches++;
                }
        }

        function Update(event:Event)
        {
            //If player is not attacking
            if (Attacking == false)
            {
                Punching = false;
                Punches = 0;
                Kicking = false;
                Kicks = 0;
            }   
            else if (Attacking == true)
            {

                if (Punching == true)
                {
                    gotoAndStop('Jab' + Punches);
                }
            }

        }


        function KeyUp(event:KeyboardEvent)
        {
            stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressed);

        }
    }
}

也在我放下的每个攻击动画的最后一帧内

import flash.display.MovieClip;
import flash.events.Event;

stop();
MovieClip(parent).Attacking = false;
MovieClip(parent).Punches = 0;

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    首先,您应该从 KeyPressedKeyUp 方法中删除添加和删除的事件侦听器(它们不是必需的,它们只会导致问题)并像其他方法一样在 costructor 中注册 key up 事件二。

    其次,要做到这一点,您需要检查按键是否按下而不是监听按键。为此,您需要一个名为 holdingAttackKey 的新字段。

            var holdingAttackKey:Boolean = false;  
    
    
    
            function KeyPressed(event:KeyboardEvent):void {
                if (event.keyCode == 65)
                {
                    holdingAttackKey = true;
    
                    Attacking = true;
                    Punching = true;
                    //...
    
    
    
        function KeyUp(event:KeyboardEvent)
        {
            holdingAttackKey = false;
        }
    
    
    
        function Update(event:Event)
        {
            if(holdingAttackKey && Attacking==false) {
                    Attacking = true;
                    Punching = true;
                    Punches++;
            }
            //....
    

    【讨论】:

    • 谢谢,我会试一试,但我需要那些听众,因为不同的原因/功能有效。我放置的代码只是我整个冗长代码中的相关代码,但我会尝试一下并让你知道
    猜你喜欢
    • 2016-09-11
    • 2018-09-15
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多