0

buttonSpriteにマウスを合わせると、displaySpriteがステージに追加され、buttonSpriteにマウスを合わせると、displaySpriteが削除されます。

私の問題は、buttonSpriteをすばやくマウスオーバーして数回押し出すと、displaySpriteが削除されず、エラーメッセージ(エラー#1009)が表示されることです。「displaySprite=null」と入力しても、機能しません。助言がありますか?ありがとう

var buttonSprite:Sprite = new Sprite();
addChild(buttonSprite);
buttonSprite.addEventListener(MouseEvent.MOUSE_OVER, overSprite);

var displaySprite:Sprite;

function overSprite(e:MouseEvent):void{

    displaySprite = new Sprite();
    addChild(displaySprite);
    buttonSprite.addEventListener(MouseEvent.MOUSE_OUT, outSprite);

}
function outSprite(e:MouseEvent):void{

    removeChild(displaySprite);
    displaySprite = null;

}
4

3 に答える 3

1

イベントが順番に発生するという保証はありません。
あなたの場合、displaySpriteを複数回インスタンス化する必要はありません。
ヌルにしないでください。オブジェクトがそこにあります。

var buttonSprite:Sprite = new Sprite();
addChild(buttonSprite);
buttonSprite.addEventListener(MouseEvent.MOUSE_OVER, overSprite);

//you only need to create it once.
var displaySprite:Sprite = new Sprite();

function overSprite(e:MouseEvent):void{
    addChild(displaySprite);
    buttonSprite.addEventListener(MouseEvent.MOUSE_OUT, outSprite);
}
function outSprite(e:MouseEvent):void{
    removeChild(displaySprite);
}
于 2012-06-20T19:34:45.083 に答える
0

問題は、表示オブジェクトにマウスを合わせると、MouseEvent.MOUSE_OVER が複数回ディスパッチされることです。試してみる必要があるのは、MouseEvent.ROLL_OVER と MouseEvent.ROLL_OUT です。これら 2 つのイベントは 1 回ディスパッチされます。

次の行に沿ったもの:

var buttonSprite:Sprite = new Sprite();
addChild(buttonSprite);
buttonSprite.addEventListener(MouseEvent.ROLL_OVER, overSprite);
buttonSprite.addEventListener(MouseEvent.ROLL_OUT, outSprite);
var displaySprite:Sprite;

function overSprite(e:MouseEvent):void
{
    if(!displaySprite)
    {
       displaySprite = new Sprite();
       addChild(displaySprite);
    }

}

function outSprite(e:MouseEvent):void{
    if(displaySprite)
    {
        removeChild(displaySprite);
        displaySprite = null;
    }

}
于 2012-06-20T15:54:45.950 に答える
0

これはどう?

var buttonSprite:Sprite = new Sprite();
addChild(buttonSprite);
buttonSprite.addEventListener(MouseEvent.MOUSE_OVER, overSprite);
buttonSprite.addEventListener(MouseEvent.MOUSE_OUT, outSprite);

var displaySprite:Sprite;
addChild(displaySprite);
displaySprite.visible=false;

function overSprite(e:MouseEvent):void
{
    displaySprite.visible = true;
}

function outSprite(e:MouseEvent):void
{
    displaySprite.visible = false;
}
于 2012-06-20T15:49:28.147 に答える