1

次のコードを検討してください。

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」で子を検出したくありません。

mouseChildren = false; 

明らかに、この特定のケースでは解決策ではありません。何か案は?

4

2 に答える 2

1

私は同じ問題を抱えていて、本当に予期しない何かでそれを解決しました...

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;
于 2012-09-06T13:31:15.220 に答える
1

ROLL_OVER の制限または設計機能のようです。ROLL_OVER イベントを MOUSE_OVER に変更し、ターゲットと currentTarget が正しいスプライトを提供している次のプログラムを確認してください。

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

    }

}
于 2012-09-06T13:17:15.483 に答える