ActionScript 3 EventListener 和带有参数的函数

ActionScript 3 EventListener and Function with parameter

所以我正在使用 Adob​​e Animate 开发一个项目,它是一个交互式地图。

我想要做的是当我将鼠标悬停在关键区域上时让弹出窗口淡入。例如,一个弹出窗口,解释什么可以在回收区进行回收。由于有多个回收位置,我创建了两个函数,一个用于隐藏弹出窗口,另一个用于显示它,并且我使用 switch case 来确定哪个回收位置正在发生鼠标悬停事件。

所以,比如show事件是这样设置的:

function showShred(event: MouseEvent, shredNum: int): void {
switch (shredNum) {
    case 1:
        TransitionManager.start(shreddingInfo_flr3_1, {
            type: Fade,
            direction: Transition.IN,
            duration: 3,
            easing: Strong.easeOut
        });
        break;
    case 2:
        TransitionManager.start(shreddingInfo_flr3_2, {
            type: Fade,
            direction: Transition.IN,
            duration: 3,
            easing: Strong.easeOut
        });
        break;
    case 3:
        TransitionManager.start(shreddingInfo_flr3_3, {
            type: Fade,
            direction: Transition.IN,
            duration: 3,
            easing: Strong.easeOut
        });
        break;
}
}

所以我添加了事件侦听器,它们只是导致错误并且似乎不喜欢该函数采用参数。

shredBtn_Flr3_1.addEventListener(MouseEvent.MOUSE_OVER, showShred(1));

我对 ActionScript 3.0 非常陌生,因此非常感谢任何帮助和提示!

错误 #1:事件处理程序采用唯一参数:事件对象。

错误 #2:您要为事件订阅一个方法,showShred(1) 立即调用该方法并且 returns null,这不是有效的事件处理程序。

事件对象包含对事件源的引用。在您的情况下,您可以通过以下方式进行:

shredBtn_Flr3_1.addEventListener(MouseEvent.MOUSE_OVER, showShred);
shredBtn_Flr3_2.addEventListener(MouseEvent.MOUSE_OVER, showShred);
shredBtn_Flr3_3.addEventListener(MouseEvent.MOUSE_OVER, showShred);

function showShred(e:MouseEvent): void
{
    switch (e.currentTarget)
    {
        case shredBtn_Flr3_1:
            fadeIn(shreddingInfo_flr3_1);
            break;

        case shredBtn_Flr3_2:
            fadeIn(shreddingInfo_flr3_2);
            break;

        case shredBtn_Flr3_3:
            fadeIn(shreddingInfo_flr3_3);
            break;
    }
}

function fadeIn(target:DisplayObject):void
{
    TransitionManager.start(target, {
        type: Fade,
        direction: Transition.IN,
        duration: 3,
        easing: Strong.easeOut
    });
}