【问题标题】:How to loop specific MovieClips如何循环特定的影片剪辑
【发布时间】:2014-04-15 23:59:22
【问题描述】:

我目前正在使用 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(pressed) 处理函数;

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:
}

【问题讨论】:

    标签: actionscript-3 flash animation symbols


    【解决方案1】:

    这里有几个问题:

    1. 向下键会在几秒钟后被重复调用,所以它会不断地告诉movieClip gotoAndPlay 某个帧,这就是为什么你会得到重复的1a、2a、1a...等 strong> 在动画序列的末尾。您只需要在 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 帧上,使用 gotoAndPlay('1a') 这样动画就会自动循环播放。

    希望对您有所帮助。

    【讨论】:

    • 感谢您的帮助。我现在设法修复它,你的帮助帮助很大:) 只有一个问题 - 我试图让游戏运行“跳跃”动画(面向右侧),然后运行默认的“静止”动画(面向也对)。但是我不知道如何将它发送到那个动画。和以前一样,动画是“玩家”符号中的符号。我尝试使用gotoAndPlay("standRight", "Player");,但它无法将 Player 识别为其他动画所在的目录,但它没有。符号之间有不同的命令吗?
    • 很高兴这有效。不幸的是,您不能告诉 gotoAndPlay 一次播放两件事。如果我理解正确,您可以在播放跳跃动画时让角色面向左/右。设置您的动画影片剪辑,角色仅面向右侧或左侧,即跳跃动画面向右侧,行走动画面向右侧......等。诀窍是将 xScale 更改为 -1,以便动画影片剪辑水平翻转 180 度,就好像它朝左一样。
    • 谢谢 :) 我已经以正确的方式翻转/跳跃。但是,当玩家着陆时,我不知道如何让角色面向相同的方向站立(如果不移动)或以相同的方式奔跑。玩家只是......消失,直到按下一个键,但我更希望角色站立然后运行(更好的过渡):/
    • @NeoKuro 很遗憾,我需要更多信息来帮助您。你用什么代码来处理跳跃动画和它着陆后。也许用你正在使用的代码启动另一个线程:)
    • 抱歉,我自己尝试解决了一段时间(cba 过去几天都这样做了哈哈)但我终于解决了,使用之前的解决方案并翻转它。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2017-06-24
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多