ACTIONSCRIPT 2:按下键

时间:2018-03-08 13:16:39

标签: flash actionscript-2

我正在使用ActionScript 2在ADOBE FLASH CS6上制作我的第一个平台游戏。 当我按 W + 时,我的角色会做一个短划线攻击动画。

  

我的问题是

如果我不持有 W + ,则动画会剪切。如果我坚持下去,我的角色就​​会不断前进。

  

我想要的是,

当我按住 W + 时,我希望我的角色只破解一次并执行完整的动画。当动画完成时,如果我仍然保持正确的输入,我希望我的角色执行我之前描述的内容。

我设法正确地进行了双跳,但我想不出解决当前问题的方法。任何解决方案?

这是我演示的链接(有背景音乐):http://www.fastswf.com/tLr3bCA

输入:

  • (JUMP)
  • (CROUCH)
  • / (MOVE)
  • HOLD Q (RUN FASTER)
  • SPACE 在地下(双跳)
  • + W (SWIFT STRIKE)< - issue

以下是我的角色MovieClip中的ActionScript的一部分(不在帧时间轴上):

{
    //GENJI COMMANDS
    if (Key.isDown(Key.RIGHT) && !Key.isDown(81))
    {
        _x += speed;
        this.gotoAndStop("genjirun");
        this._xscale = 100;
    }
    else if (Key.isDown(Key.RIGHT) && Key.isDown(81))
    {
        _x += speed + 5;
        this.gotoAndStop("genjirunfast");
        this._xscale = 100;
    }
    else if (Key.isDown(Key.LEFT) && !Key.isDown(81))
    {
        _x -= speed;
        this.gotoAndStop("genjirun");
        this._xscale = -100;
    }
    else if (Key.isDown(Key.LEFT) && Key.isDown(81))
    {
        _x -= speed + 5;
        this.gotoAndStop("genjirunfast");
        this._xscale = -100;
    }
    else if (Key.isDown(Key.DOWN) && touchingGround && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT) && !Key.isDown(87))
    {
        this.gotoAndStop("genjicrouch");
    }
    else if (Key.isDown(Key.DOWN) && touchingGround && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT) && Key.isDown(87) && _xscale == 100)
    {
        this.gotoAndStop("genjislash");
        _x += 5;


    }
    else if (Key.isDown(Key.DOWN) && touchingGround && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT) && Key.isDown(87) && _xscale == -100)
    {


        this.gotoAndStop("genjislash");
        _x += -5;



    }



    if (Key.isDown(Key.UP) && touchingGround)
    {
        grav = maxJump;
    }
    else if (!touchingGround && Key.isDown(32) && DJcancel == 0)
    {
        grav = -19;
        DJcancel = 3;
    }
    else if (!touchingGround or !Doublejumping == 3)
    {
        this.gotoAndStop("genjijump");
    }
    else if (touchingGround && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT) && !Key.isDown(Key.DOWN))
    {
        this.gotoAndStop(1);
        DJcancel = 0;
    }
    if (touchingGround)
    {
        DJcancel = 0;
    }

有什么建议吗?此外,这种方法是好还是我应该改变它?

2 个答案:

答案 0 :(得分:0)

首先,我建议您切换到AS3,因为AS2已经过时了10年,这并非没有道理。它很慢,非常不直观,并且给你很多错误的想法。另外,AS3没有什么可以用AS3做的,但事实并非相反:AS3中有很多东西你不能用AS2做。

此外,我怀疑是否有任何人可以专业地帮助您使用AS2,因为它已过时10年并且仅由于向后兼容原因而受Adobe支持。

然后,您可以通过一些逻辑轻松解决您的问题。您需要finite-state machine模型。让我们定义两个状态变量:

EidResolver resolver = getEidResolverForGoogleOAuthToken(googleOAuthToken);
String beaconName = resolver.resolve(ephemeralId);

变量 dashKeys 应代表 + W 按下状态。我相信你会毫无问题地管理它。变量 dashState 应该采用3个不同的值(好吧,状态):“破折号”,同时播放破折号动画,“之后”如果破折号动画是完成并且“ none ”如果它们都不是。它显然以“ none ”开头。

现在,逻辑。

var dashKeys:Boolean = false;
var dashState:String = "none";

现在只剩下两件事。

  1. 在短划线动画完成后,将 dashState 更新为“之后的”,这样逻辑就可以推进。
  2. dashState 重置为“ none ”,如果在任何情况下您在完成之前打破短划线动画以便不停止逻辑流程。

答案 1 :(得分:0)

使用AS2,为您的MovieClip定义.onKeyDown,如下所示:

yourMC.onKeyDown = function(e) {
    // Now test e
};

按下该键时,它只会处理一次,但如果按住该键,则不会重复处理。