如何循环特定的MovieClip

时间:2014-04-15 23:59:22

标签: actionscript-3 flash animation symbols

我目前正在使用ActionScript 3在Flash CS6中制作平台游戏。我已设法使用不同的帧将基本精灵设置为单个符号/对象。

每个精灵/动作本身也是一个不同的符号(例如,右边的帧有5个左右,所以我将它们合并为一个单独的符号。然后将该符号复制到player符号中(或主要符号)。

我设法让我的代码使用gotoAndPlay()命令运行特定的符号/帧,但我的问题是即使我在循环结束时有stop();动作,它继续到下一帧。

在这种情况下,它会继续运行'runLeft'动画的第一帧,然后再恢复为正确的'runRight'动画。然而,它继续在两者之间切换并闪烁,直到我放开键。

假设我有两个方向的两个动画,两个长5帧(1a,2a,1b等)。当我按下右箭头键时,它将运行框架;

1a, 1b, 1c, 1d, 1e

然而,在1e,我有一个stop();命令,理论上认为,由于案例仍处于活动状态,它将循环回到开始。相反,它做到了这一点;

1a, 1b, 1c, 1d, 1e, 2a, 1a, 2a, 1a .....等等,直到我释放钥匙。如果我按住左箭头键,它将继续播放“动画3”的第一帧(之后的下一个动画)。

以下是我正在使用的代码,但我不能确定它是DocumentMain.as代码的问题,但更多的是符号本身的问题?

KeyDown(已按下)处理函数;

switch(e.keyCode)
{
    case 37:    //Left Arrow
        _vx = -5;
        _player.gotoAndPlay("runLeft");
        break;

    case 38:    //Up Arrow
        _vy = -27;
        break;

    case 39:    //Right Arrow
        _vx = 5;
        _player.gotoAndPlay("runRight");
        break;

    default:
}

和KeyUP处理函数;

switch(e.keyCode)
{
    case 37:    //Left Arrow                
        _vx = 0;
        _player.gotoAndPlay("standLeft");
        break;

    case 39:    //Right Arrow
        _player.gotoAndPlay("standRight");
        _vx = 0;
        break;

    default:
}

1 个答案:

答案 0 :(得分:1)

这里有几个问题:

  1. 几秒后会重复调用向下键,因此它会不断告诉movieClip gotoAndPlay某个帧,这就是为什么你得到重复的 1a,2a,1a ......等动画序列结束时。你只需要在keyDown上调用gotoAndPlay一次,也就是说可能使用布尔来跟踪:

    case 37:    //Left Arrow keydown
        _vx = -5;
        if (!isLeft) {
            isLeft = true;
            _player.gotoAndPlay("runLeft");
        }
        break;
    
    
    case 37:    //Left Arrow keyup
        _vx = 0;
        isLeft = false;
        _player.gotoAndPlay("standLeft");
        break;
    
  2. 而不是使用stop();在movieClip框架上,使用ie gotoAndPlay('1a'),这样动画就会自行循环。
  3. 希望有所帮助。