在我的场景中,我有一个带有动态加载图像的精灵“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);
}
});
*/
答案 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
。