AS3 CS5如何在SOUND_COMPLETE之后刷新舞台?

时间:2012-05-24 10:37:03

标签: actionscript-3 flash-cs5

我有一个教育游戏,孩子们听到声音,然后必须从3张图片中选择正确的图像。

当他们想要再次听到声音时,他们可以按下扬声器按钮。 3个图像是动画片段(名为card1,card2和card3)动态添加到舞台上,buttonMode = true。

每当他们按下扬声器再次听到声音或者如果他们按错了图像就得到反馈,我会在声音持续时间内从卡片中移除mouse_events。我还设置了buttonMode = false,因此孩子们知道在播放声音时他们无法点击。

在SOUND_COMPLETE上,我再次添加eventListeners。现在,buttonMode = true也是如此。

我想刷新一下像event.updateAfterEvent();所以如果将光标放在其中一张卡上,光标会变为一只手。但是event.updateAfterEvent()无法附加到SOUND_COMPLETE,您只能在MOUSE或GESTURE等交互事件后使用它。

tldr;如何刷新我的舞台,以便在SOUND_COMPLETE之后光标变回一只手?

以下是一些代码:

    function speakerClick(event:MouseEvent):void
    {
        remLst();
        SoundMixer.stopAll();
        cardCnl = gameSnd.play();
        cardCnl.addEventListener(Event.SOUND_COMPLETE, sndComplete);
    }
    function sndComplete(event:Event):void
    {
        cardCnl.removeEventListener(Event.SOUND_COMPLETE, sndComplete);
        addLst();           
    }

    function addLst():void
    {
        for (var i:int = 1; i < 4; i++)
        {
            var card:Card = getChildByName("card" + i) as Card;
            card.addEventListener(MouseEvent.CLICK, fnClick);
            card.addEventListener(MouseEvent.MOUSE_OVER, fnOver);
            card.addEventListener(MouseEvent.MOUSE_OUT, fnOut);
            card.buttonMode = true;
        }
    }

1 个答案:

答案 0 :(得分:0)

在你的addLst函数中,当循环显示4张牌时,你可以检查当前的鼠标位置,并检查它是否在其中一张牌的边界内。

它可以像这样工作:

if ( mouseX > card.x && mouseX < (card.x + card.width)
     mouseY > card.y && mouseY < (card.y + card.height))
{
    Mouse.cursor = MouseCursor.BUTTON;
}

我不是百分百肯定,但是当鼠标离开对象时buttonMode将其更改回箭头。我通常不使用buttonMode。