0

私のシナリオでは、動的に読み込まれた画像を持つスプライト「imgSprite」があります。「rectangle」という名前のこのスプライト内の左下隅近くに小さなボックスを描画しました。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);
    }
});
*/
4

1 に答える 1

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

于 2013-10-14T13:13:52.800 に答える