取消选择精灵点击舞台上的其他地方或其他动画片段

时间:2013-10-14 12:47:48

标签: actionscript-3

在我的场景中,我有一个带有动态加载图像的精灵“imgSprite”。我在这个名为“矩形”的精灵里面的左下角附近画了一个小盒子。 imageSprite也可以拖放。当我点击图像时,我将其设置为显示矩形,但我无法弄清楚如何隐藏它在imgSpirte外面的某处点击。

var imgSprite:Sprite = new Sprite();
imgSprite.addChild(image);
MovieClip(root).addChild(imgSprite);

/* DELETE BUTTON */
var rectangle:Sprite = new Sprite();
rectangle.graphics.beginFill(0xFF0000);
rectangle.graphics.drawRect(0, 0, 20,20);
rectangle.graphics.endFill();
rectangle.y=imgSprite.y+imgSprite.height;
rectangle.x=imgSprite.x-20;
imgSprite.addChild(rectangle);

rectangle.addEventListener(MouseEvent.CLICK, function() {
    rectangle.parent.parent.removeChild(imgSprite);
});

imgSprite.addEventListener("mouseDown", function() {
    imgSprite.startDrag();
    rectangle.visible = true;
});

stage.addEventListener("mouseUp", function() {
    imgSprite.stopDrag();
});

/*
imgSprite.addEventListener("mouseOut", function() {
    var timer = setInterval(deSelect,3000);
    function deSelect(){
      rectangle.visible = false;
      clearInterval(timer);
    }
});
*/

1 个答案:

答案 0 :(得分:0)

您可以尝试临时监听器进行舞台演出。说,像这样:

if (rectangle) rectangle.visible=false; // or it won't trigger
imgSprite.addEventListener("mouseDown",onMouseDown);
function onMouseDown(e:MouseEvent):void {
    if (rectangle) if (!rectangle.visible) 
        stage.addEventListener("mouseDown",removeRectangle);
    imgSprite.startDrag();
    rectangle.visible=true;
    e.stopPropagation(); // this is needed to not get the rectangle removed as soon as you click on imgSprite
}
function removeRectangle(e:MouseEvent):void {
    if (rectangle) rectangle.visible=false;
    stage.removeEventListener("mouseDown",removeRectangle);
}

它的工作原理如下:只要您点击imgSprite,就会将侦听器分配到舞台并使矩形可见。如果再次单击imgSprite,则矩形已经可见,因此不会添加额外的侦听器。此外,e.stopPropagation()会阻止现有侦听器被触发并隐藏矩形。只要你点击imgSprite上的其他地方,听众就会被触发,从阶段中移除,并隐藏rectangle