制作一个转到主时间轴上随机帧(来自数组)的按钮。如何从一个影片剪辑?

Making a button that goes to a random frame (from an array) on the main timeline. How to do from a movie clip?

我看到了很多问题,询问如何在影片剪辑中制作一个按钮,该按钮指向主时间轴中的一个帧,并查看了它们。但是如果你想去一组特定的帧中的随机帧,是不是就不一样了?除了像 stop(); 这样的简单东西之外,我从来没有真正使用过 AS3;或 gotoAndPlay.

这是我目前的主要时间表:

这是我目前使用 Google 获得的代码:

var frameB:Array=[1,28,45,56,71,91,106,126];
blue_circle1.addEventListener(MouseEvent.CLICK, choose);

function choose1(event:MouseEvent):void {
    var randomFrame:Number = frameB[Math.floor(Math.random() * frameB.length)];
    trace(randomFrame);
    gotoAndPlay(randomFrame);
}

当我在主时间轴的旋转按钮上使用代码时,代码工作正常。但是当我把它放在影片剪辑的按钮中时它不起作用。我需要更改它才能正常工作。如果有更好的方法,我愿意尝试。

编辑:我应该再澄清一下。我在从左到右移动的轮子上得到了矩形。它在影片剪辑中执行此操作。我想让按钮随之移动。但是当我将按钮放入所述影片剪辑时,按钮上的代码停止工作。我希望我最终没有让事情变得更加混乱。

当您将按钮 and/or 代码放在 movieClip 中时,它会更改 gotoAndPlay() 所指的 movieClip。您需要指定调用 gotoAndPlay() 的影片剪辑。对于主时间线 gotoAndPlay() 有效,但在 movieClip 中你必须使用这个:

parent.gotoAndPlay(randomFrame);

或者您可能需要像这样将父级的类型设置为 MovieClip:

MovieClip(parent).gotoAndPlay(randomFrame);

但是,最好使用外部 .as 文件,因为它可以让您最大程度地控制代码。

  • 将下面的代码保存在名为 'MyFlashAnimation.as'
  • 的文件中
  • 创建一个名为 'mycodefolder' 的文件夹,并将其放在与您的 .fla 相同的 directory/folder 中。
  • 使用 'MyFlashAnimation.as' 作为您的文档 class。在 Flash/Animate IDE 中找到“属性”面板,然后是“发布”部分
  • 在显示 'Class' 的发布部分输入:mycodefolder.MyFlashAnimation(不要添加 .as)

代码:

package mycodefolder {

    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class MyFlashAnimation {

        private var animationClip:MovieClip;
        private var blueCircle1:Button;

        private var frameB:Array = [1,28,45,56,71,91,106,126];

        // constructor
        public function MyFlashAnimation() {

            // this your main robot/car animation
            // this assumes animation_clip is on the main stage
            animationClip = this.animation_clip;

            // this is your button. this assumes blue_circle1 is a child of
            // your animation_clip. update the path if necessary.
            // for example, it might be: animationClip.robot_body.blue_circle1
            blueCircle1 = animationClip.blue_circle1;

            // add listener
            blue_circle1.addEventListener(MouseEvent.CLICK, choose);
        }

        function choose1(event:MouseEvent):void {
            var randomFrame:Number = frameB[Math.floor(Math.random() * frameB.length)];
            trace(randomFrame);

            // tell animation clip to gotoAndPlay
            animationClip.gotoAndPlay(randomFrame);
        }

    }
}

应该可以。如果您的所有影片剪辑路径都正确。

"The code works fine when I use it on the rotation buttons in the main timeline. But it doesn't work when I put it in a button in a movie clip."

您将按钮粘贴到的 MClip 的实例名称是什么?该 MC 名称将 "add" 指向您按钮的最终路径。

示例:

(1) 如果您的 blue_circle1 在舞台上(您已经可以做到):

blue_circle1.addEventListener(MouseEvent.CLICK, choose);

与...

2) 如果您的 blue_circle1 在另一个 MClip 中(示例名称为:thingMC) :

thingMC.blue_circle1.addEventListener(MouseEvent.CLICK, choose);