我有名为mClip的MyMovieClip。 mClip内部有两个名为btn1 btn2的按钮



我需要在我的动作脚本代码中访问这些按钮。我已经声明:

var mClip:MyMovieClip = new MyMovieClip();
var btn1:MyButton1 = new MyButton1();
var btn2:MyButton2 = new MyButton2();


我尝试了2种方法,但均未成功:

1。

mClip.btn1.addEventListener(MouseEvent.CLICK, popUp1);
mClip.btn2.addEventListener(MouseEvent.CLICK, popUp2);

function popUp1(event:MouseEvent):void {
   trace("test 1");
}
function popUp2(event:MouseEvent):void {
   trace("test 2");
}


2。

btn1.addEventListener(MouseEvent.CLICK, popUp1); //removed mClip
btn2.addEventListener(MouseEvent.CLICK, popUp2); //removed mClip

function popUp1(event:MouseEvent):void {
   trace("test 1");
}
function popUp2(event:MouseEvent):void {
   trace("test 2");
}


我没有任何错误,单击按钮后什么也没有发生。请问你能帮帮我吗?谢谢

最佳答案

这是可能发生的情况。尽管我必须做出以下假设:


您正在使用Flash Pro
在Flash Pro中,您已经创建了一个影片剪辑,将其放置在主时间轴上,并为其指定了mClip的实例名称。
在mClip时间线上,您已经创建了两个按钮,并为其指定了实例名称btn1和btn2。
您的所有代码都在主时间轴上。


当您执行以下操作时:

var mClip:MyMovieClip = new MyMovieClip();
var btn1:MyButton1 = new MyButton1();
var btn2:MyButton2 = new MyButton2();


您实际上是在告诉Flash使用这些名称(mClip,btn1,btn2)并为它们分配新对象(旧对象仍然存在,但是var引用您刚刚创建的新对象-因此,将click事件添加到对象屏幕上没有的内容)。

当您将影片剪辑添加到时间轴并为其指定实例名称时,在幕后实际上与该代码相同。删除这三行,您的第一次尝试代码就会起作用。 (假设我以上所有假设均正确无误,请告知)

07-27 13:49