制作一个转到主时间轴上随机帧(来自数组)的按钮。如何从一个影片剪辑?
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);
我看到了很多问题,询问如何在影片剪辑中制作一个按钮,该按钮指向主时间轴中的一个帧,并查看了它们。但是如果你想去一组特定的帧中的随机帧,是不是就不一样了?除了像 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);