Flash 闪存CS5+;AS3时间轴导航
CS5和AS3新手,所以如果我犯了一个根本性的错误,请毫不犹豫地纠正我 我试图构建一个相当长且复杂的表单。因此,这将需要通过它的不同部分进行导航。我不熟悉Flash和AS3,所以我开始做一些原型设计,并有两个按钮在时间轴上向前和向后导航。我现在的问题是,当我试图将它从“代码片段”(正确的术语?)区域带到我的主ActionScript文件中时。按钮出现,但按下它们不会执行MouseeEvent 所以有两个问题。Flash 闪存CS5+;AS3时间轴导航,flash,actionscript-3,actionscript,mouseevent,flash-cs5,Flash,Actionscript 3,Actionscript,Mouseevent,Flash Cs5,CS5和AS3新手,所以如果我犯了一个根本性的错误,请毫不犹豫地纠正我 我试图构建一个相当长且复杂的表单。因此,这将需要通过它的不同部分进行导航。我不熟悉Flash和AS3,所以我开始做一些原型设计,并有两个按钮在时间轴上向前和向后导航。我现在的问题是,当我试图将它从“代码片段”(正确的术语?)区域带到我的主ActionScript文件中时。按钮出现,但按下它们不会执行MouseeEvent 所以有两个问题。 1。我这样做对吗? 2。当代码位于.as文件中时,MouseEvent为什么不工作?
1。我这样做对吗?
2。当代码位于.as文件中时,MouseEvent为什么不工作?
Form.fla-第1帧代码段
var form:Form = new Form();
addChild(form);
表格A.as
package
{
import flash.display.MovieClip;
import fl.controls.Button;
import flash.events.MouseEvent;
public class Form extends MovieClip
{
private var nextButton:Button;
private var prevButton:Button;
public function Form()
{
setupNavigation();
}
private function setupNavigation():void
{
nextButton = new Button();
nextButton.label = "Next";
// ... size and position code
nextButton.addEventListener(MouseEvent.CLICK, moveForward);
prevButton = new Button();
prevButton.label = "Previous";
// ... size and position code
prevButton.addEventListener(MouseEvent.CLICK, moveBackward);
addChild(nextButton);
addChild(prevButton);
}
// Setup Mouse events
private function moveForward(event:MouseEvent):void
{
nextFrame();
}
private function moveBackward(event:MouseEvent):void
{
prevFrame();
}
}
}
您必须使用setter函数将主时间线的引用传递给表单类
var form:Form = new Form();
form.mainTimeline = this;
addChild(form);
在表单类(不是代码段,类是正确的术语)中,添加以下函数和变量:
private var _mainTimeline:Object;
public function set mainTimeline(mtl:Object):void
{
_mainTimeline = mtl;
}
然后在向前/向后移动函数中,将prevFrame()和nextFrame()更改为:
有几种方法可以实现您想要实现的目标,也就是改变部分的方法。你的方法就是一种方法。也许有一些更好的方法,但您的方法并没有明显的错误或任何东西。:) 更好更干净的方法是使用文档类。文档类通过使表单类充当时间线本身,将不再需要向表单类传递时间线引用 这是你要怎么做的。在fla文件中,取消选择已选择的任何对象,然后查看“属性”工具栏。在“Publish”标题下,您将看到一个可编辑的文本字段,旁边写着“Class:”。输入fla的类相对路径,在本例中,该路径仅为类名,因为没有定义包。所以只要在里面输入“表单”。文档类始终必须扩展DisplayObjectContainer,其中包括MovieClip和Sprite,因此您已经编写的表单类应该可以完美地工作
完成后,您可以像在问题中那样调用nextFrame()和prevFrame(),它应该可以正常工作。您可以将
\u main timeline
属性键入MovieClip而不是Object,并对mtl
参数执行相同的操作。Taurayi是正确的,这将更加具体和正确。
_mainTimeline.prevFrame();
_mainTimeline.nextFrame();