Javascript 动作脚本3。如何在Flash中访问电影剪辑中的按钮?

Javascript 动作脚本3。如何在Flash中访问电影剪辑中的按钮?,javascript,actionscript-3,flash,actionscript,movieclip,Javascript,Actionscript 3,Flash,Actionscript,Movieclip,我有MyMovieClip的名字mClip。mClip内部有两个按钮,名为:btn1 btn2 我需要在动作脚本代码中访问这些按钮。我宣布: var mClip:MyMovieClip = new MyMovieClip(); var btn1:MyButton1 = new MyButton1(); var btn2:MyButton2 = new MyButton2(); 我试过两种方法,但都没有成功: 1. mClip.btn1.addEventListener(MouseEvent.

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

我需要在动作脚本代码中访问这些按钮。我宣布:

var mClip:MyMovieClip = new MyMovieClip();
var btn1:MyButton1 = new MyButton1();
var btn2:MyButton2 = new MyButton2();
我试过两种方法,但都没有成功:

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");
}
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");
}
2.

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");
}
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");
}

我没有收到任何错误,只是点击按钮后什么也没发生。你能帮帮我吗?谢谢

如果类标记为
动态
,则第一次尝试是正确的。但由于情况并非如此,您应该直接使用变量:

btn1.addEventListener(..
如果在定义它们的同一类中使用(并将它们添加到mClip中)。实际情况是使用变量,而不是实例名。您可能会遇到问题,因为您没有在定义这些按钮的地方工作


如果这仍然不起作用,那么您可能正在单击该子对象上方的某个对象。

从您的图表中还不完全清楚,但是按钮应该有彩色(不是空的)字段(尽管alpha可以是任何对象,包括“零”)——因此您实际上正在单击某个对象。而且,如果“按钮”只是编码为按钮的MovieClips,则标签应为静态文本且不可选择


我们假设您的代码是时间线代码,而不是编码类的一部分。

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

  • 您正在使用flash pro
  • 在flash pro中,您创建了一个电影剪辑,将其放置在主时间线上,并将其命名为实例名mClip
  • mClip时间线上,您创建了两个按钮,并为它们指定了btn1btn2的实例名称
  • 所有代码都在主时间线上
  • 当您执行以下操作时:

    var mClip:MyMovieClip = new MyMovieClip();
    var btn1:MyButton1 = new MyButton1();
    var btn2:MyButton2 = new MyButton2();
    
    实际上,您是在告诉flash使用这些名称(mClip、btn1、btn2)并将新对象分配给它们(旧对象仍然存在,但变量引用您刚刚创建的新对象-因此您可以将单击事件添加到屏幕上不存在的对象)

    当您将电影剪辑添加到时间轴并为其指定实例名称时,在幕后,它的实际操作与该代码相同。删除这三行代码,第一次尝试的代码就可以运行了。(假设我上述所有假设均正确,如果不正确,请告知)