Actionscript 3 儿童问题

Actionscript 3 儿童问题,actionscript-3,Actionscript 3,考虑以下代码 var sParent:Sprite = new Sprite(); var obj:Sprite = new Sprite(); var childA:Sprite = new Sprite(); var childB:Sprite = new Sprite(); sParent.addChild(obj); obj.addChild(childA); obj.addChild(childB); childB.mouseChildren = false; childB.mou

考虑以下代码

var sParent:Sprite = new Sprite();
var obj:Sprite = new Sprite();
var childA:Sprite = new Sprite();
var childB:Sprite = new Sprite();

sParent.addChild(obj);
obj.addChild(childA);
obj.addChild(childB);

childB.mouseChildren = false;
childB.mouseEnabled  = false;

sParent.addEventListener(MouseEvent.CLICK, itemClickHandler);
sParent.addEventListener(MouseEvent.ROLL_OVER, onHoverIn);
sParent.addEventListener(MouseEvent.ROLL_OUT, onHoverOut);
现在,我想检测“ChildA”上的事件,但不想检测“ChildB”上的孩子


显然,在这种特殊情况下,这不是解决方案。有什么想法吗?

看起来这是翻滚的限制或设计功能,检查以下程序我已将翻滚事件更改为鼠标翻滚,目标和当前目标正在提供正确的精灵:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class Main extends Sprite 
    {

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            var sParent:Sprite = new Sprite();

            var obj:Sprite = new Sprite();

            var childA:Sprite = new Sprite();

            childA.graphics.beginFill(0xff0000);
            childA.graphics.drawRect(0, 0, 100, 50);
            childA.graphics.endFill();

            var childB:Sprite = new Sprite();
            childB.x = 150;
            childB.graphics.beginFill(0x00ff00);
            childB.graphics.drawRect(0, 0, 100, 50);
            childB.graphics.endFill();

            sParent.addChild(obj);
            obj.addChild(childA);
            obj.addChild(childB);

            childB.mouseChildren = false;
            childB.mouseEnabled  = false;

            sParent.mouseEnabled = false;
            obj.mouseEnabled = false;

            sParent.addEventListener(MouseEvent.CLICK, itemClickHandler);
            sParent.addEventListener(MouseEvent.MOUSE_OVER, onHoverIn);
            sParent.addEventListener(MouseEvent.MOUSE_OUT, onHoverOut);

            addChild(sParent);
        }

        private function onHoverOut(e:MouseEvent):void 
        {
            trace(e.currentTarget.name+ " "+e.target.name);
        }

        private function onHoverIn(e:MouseEvent):void 
        {
            trace(e.currentTarget.name+ " "+e.target.name);
        }

        private function itemClickHandler(e:MouseEvent):void 
        {
            trace(e.currentTarget.name+ " "+e.target.name);
        }

    }

}

我也遇到了同样的问题,并用一些出乎意料的事情解决了它

var obj:Sprite = new Sprite();
var childA:Sprite = new Sprite();
var childB:Sprite = new Sprite();


obj.addChild(childA);
obj.addChild(childB);

obj.mouseEnabled = false; // this.
childB.mouseEnabled = false;
childB.mouseChildren = false;

遗憾的是,没有人可以继续。刚刚测试过。是否自行尝试childB.mouseEnabled=false?这在mouseChildren出现故障时对我有效。childB->parent->parent在childB->parent上有一个事件侦听器,并且buttonMode true。这可能是问题的根源。ChildB和它的父母都将mouseChildren和mouseEnabled设置为false。使用重现问题的示例更新代码,如果没有代码,很难猜出有什么问题。我将所有mouseChildren和mouseEnabled设置为true。并用鼠标滑过。终于找到了正确的目标。将在那里编写一个异常。不过,应该有办法直接解决这个问题。非常感谢您抽出时间。巴里斯帮了很多忙。
var obj:Sprite = new Sprite();
var childA:Sprite = new Sprite();
var childB:Sprite = new Sprite();


obj.addChild(childA);
obj.addChild(childB);

obj.mouseEnabled = false; // this.
childB.mouseEnabled = false;
childB.mouseChildren = false;