动作脚本3.继续动画直到最后一帧而不中断

时间:2013-09-20 11:21:10

标签: actionscript-3 flash animation actionscript movieclip

我正在制作Flash游戏。以下是具有不同动画的3种不同攻击(键盘绑定z,x,c)。

问题#1

例如,如果我使用attack1(通过单击“z”)它显示约100帧的动画,但如果在动画期间我单击attack2(x)它取消attack1动画并开始播放attack2动画。我需要在动画期间制作它不能通过使用其他动画来中断。

问题#2

如果我使用attack1(通过点击“z”)并按住“z”动画冻结,直到我释放“z”按钮。我需要做的是如果我点击任何攻击按钮一旦开始播放动画,它就不能通过点击相同的按钮来中断/暂停。

在最后一帧中的每个攻击MovieClip中,我添加了代码MovieClip(this.parent).gotoAndStop("stay");,在攻击动画播放后它开始播放“停留”动画(此部分工作)。

key_down功能:

private function key_down(event:KeyboardEvent)
{
    if (event.keyCode == 90)
    {
        attack1 = true;
    }
    if (event.keyCode == 88)
    {
        attack2 = true;
    }
    if (event.keyCode == 67)
    {
        attack3 = true;
    }

}

key_up函数:

private function key_up(event:KeyboardEvent)
{

    if (event.keyCode == 90)
    {
        attack1 = false;
    }
    if (event.keyCode == 88)
    {
        attack2 = false;
    }
    if (event.keyCode == 67)
    {
        attack3 = false;
    }
}

startAttack()函数

private function startAttack() {

            if (attack1)
            {
                Hero.gotoAndStop("attack1");
            }
            if (attack2)
            {
                Hero.gotoAndStop("attack2");
            }
            if (attack3)
            {
                Hero.gotoAndStop("attack3");
            }
}

3 个答案:

答案 0 :(得分:1)

在你的代码中,Hero可以同时以3种方式攻击,但据我所知,你不需要它。那么你为什么要制作三个独立的变量呢? 制作一个并将其命名为“攻击”。它的值将是攻击类型的数量。 您还可以创建一个将攻击号码映射到键码的数组:

var codes:Array = new Array(0, 90, 88, 67);
var attack:Number = 0;

并在key_up和key_down函数中使用它。现在,您可以添加新的攻击,而无需在函数中创建额外的ifs。

KEY_DOWN:

if(attack > 0) return; // don't interrupt other attack
for(var c in codes) {
  if(codes[c] == event.keyCode) {
      attack = c;
      Hero.gotoAndStop("attack" + attack);
  }
}

KEY_UP:

for(var c in codes) {
  if(codes[c] == event.keyCode) {
      if(c == attack) attack = 0;
  }
}

startAttack()是多余的。

答案 1 :(得分:0)

在startAttack中,您可以检查是否有一些攻击在起作用。您可以使用状态或检查帧来确定新的攻击是否可以开始。

答案 2 :(得分:0)

不受打扰的最佳方法是在攻击发生时使用标识符。在这种情况下,最好有一个布尔inAttackMode(或任何东西)来测试并查看它是否是。这是基于你的例子

private function key_down(event:KeyboardEvent)
{
    if (event.keyCode == 90)
    {
        attack1 = true;
        inAttackMode = true;
    }
    if (event.keyCode == 88)
    {
        attack2 = true;
        inAttackMode = true;
    }
    if (event.keyCode == 67)
    {
        attack3 = true;
        inAttackMode = true;
    }

}


private function startAttack() {
                if(!inAttackMode){
                if (attack1)
                {
                    Hero.gotoAndStop("attack1");
                }
                if (attack2)
                {
                    Hero.gotoAndStop("attack2");
                }
                if (attack3)
                {
                    Hero.gotoAndStop("attack3");
                }}
    }

然后把你的

MovieClip(this.parent).gotoAndStop("stay");
    inAttackMode = false;

或更好的是为每次攻击分配标识符,如inAttackMode1为真,则其他攻击无法播放。