AS3:将 button-behaviors ONLY 放在 container_mc 的 child_mcs 上的最佳方法是什么

AS3: What is the best way to put button-behaviors ONLY on child_mcs of a container_mc

我有一个 container_mc,里面有很多 child_mcs。我希望 child_mcs 具有完整的 button-like 行为(click-able,光标效果)。

我对在每个 child. 上放置单独的鼠标监听器不感兴趣 ...我只想在 parent 容器上设置一个侦听器,尽管 parent 实际上是不活动的...只有 child_mcs.

在 class 中定义按钮的常见行为,并将 class 与库中的按钮符号相关联。

您可以在容器上监听 click 事件,将 useCapture 标志设置为 trueaddEventListener 的第三个参数)——监听器将被调用每次单击任何容器的子级(包括孙级等)时。然后你可以检查哪个按钮被点击了,例如通过检查它的 name 属性.

假设您有这样的东西:

var container_mc:Sprite = new Sprite();
addChild(container_mc);

container_mc.addChild(button1);
container_mc.addChild(button2);
//and so forth with all your buttons

要按照您的要求进行操作,您需要执行以下操作:

//add a click listener to the container
container_mc.addEventListener(MouseEvent.CLICK,click);

//make the buttonMode true on the container, so you get the button hand cursor
container_mc.buttonMode = true;

function click(e:Event):void {
    //e.target is a reference to what was clicked (see caveat after code sample)

    //if all the children of container_mc are of the same custom class, 
       //you could now call a click handler on that item

    MyButtonClass(e.target).myClickHandler(e);

    //or you could use a switch statement
    switch(e.target){
        case button1:
            //button 1 was clicked, do something with it
            break;

        case button2:
            //button 2 was clicked, do something with it
            break;
    }
}

这里唯一需要注意的是,事件的目标可以是任何 child 容器的下行。因此,如果 button1 有一些 children 而那些 children 有 children,则 e.target 中引用的 object 可以是其中任何一个(曾经被点击过)。如果您的按钮内有 child object,那么确保您的目标始终是按钮的最简单方法是执行以下操作:

button1.mouseChildren = false;

这将确保按钮调度的任何鼠标事件都将 button1 作为目标,而不是任何 children。

please ignore the downvote ... if your problem is the same as mine, then this solution works

//-- pseudo code --\

*for the container:*
container.addEventListener( MouseEvent.MOUSE_DOWN , callback_function ) ;
container.buttonMode ...... false
container.mouseEnabled .... false
container.mouseChildren ... true

*for each child:*
child.buttonMode ...... true
child.mouseEnabled .... true
child.mouseChildren ... false