繁体   English   中英

flash as3 mouseChildren问题

[英]flash as3 mouseChildren issue

我有一个剪辑,我正在绘制并添加到舞台上,当它被点击时,它会添加两个作为孩子的副本。 我希望这些孩子可以点击,但问题是,如果点击它们,它会将点击注册为父点击及其子点击。 因此,不是添加两个新剪辑,而是添加4.我可以通过将movieChildren = false添加到movieClip来解决这个问题,但是当我这样做时,新剪辑是从父剪辑的中心绘制的,而不是从单击剪辑的原点。 我该如何解决这个问题? 这是我的代码:

function clickCircle(e:MouseEvent):void {
    var thisCircle = e.target;
    for (var i=0; i<thisCircle.childCircles;i++){
        trace('drawCircle' + i);
        drawCircle(thisCircle);
    }
}

function drawCircle(parentCircle){

    //trace('draw circle' + childCircles);
    var xPos;
    var yPos;
    if (circleCount == 0){
        xPos = centerStageX;
        yPos = centerStageY;
    } else {
        //xPos = parentCircle.x;
        //yPos = parentCircle.y;
        xPos = yPos = 0;
    }

    var newCircle:Shape = new Shape();
    newCircle.graphics.beginFill(circleColor);
    newCircle.graphics.drawCircle(0,0,cr); //x, y, radius
    newCircle.graphics.endFill();

    var circleClip:MovieClip = new MovieClip();
    //circleClip.mouseChildren = false;
    circleClip.childCircles = numCircles;
    circleClip.x = xPos;
    circleClip.y = yPos;
    circleClip.addChild(newCircle);
    circleClip.id = circleCount;
    if (circleCount == 0){
        addChild(circleClip);
    } else {
        parentCircle.addChild(circleClip);
    }

    circleArray.push(circleClip);
    circleClip.addEventListener(MouseEvent.CLICK,clickCircle);
    if (circleCount != 0){
        moveCircle(parentCircle,circleClip,xPos,yPos);
    }
    circleCount++;
}

事件侦听器仅注册到一个对象,但是它从子节点接收click事件,因为MouseEvents在显示列表中冒泡(即它们在层次结构中向上转发),因此每个相应的父对象将接收事件,甚至舞台。

要阻止这种情况发生,您必须明确停止事件的传播。 ActionScript事件有两种方法:

stopPropagation

==>阻止事件在以后的执行节点(即currentTarget 之后的其他对象)中被接收,但允许同一对象内的其他侦听器触发。

stopImmediatePropagation

==>在收到活动时停止活动,无论其他人在听什么。

除非你打算做其他事情而不是代码中的内容,否则这些都应该可以正常工作。 所以在你的clickCircle处理程序中,添加一行:

function clickCircle(e:MouseEvent):void {

    // --- This should stop the event from bubbling up in the display list
    e.stopPropagation();

    var thisCircle = e.target;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM