代码之家  ›  专栏  ›  技术社区  ›  Joseph Webber

我可以将一个按钮传递到它自己的MouseEvent函数中吗?

  •  1
  • Joseph Webber  · 技术社区  · 11 年前

    我在FlashDevelop中使用Flash发布了多个MovieClip符号(我的示例中只使用2个)。每个都有3帧作为默认值,悬停并单击,我将其用作按钮。

    private var btnPlay:PlayButton, btnQuit:QuitButton;
    
    btnPlay = new PlayButton();
    btnQuit = new QuitButton();
    
    btnPlay.addEventListener(MouseEvent.ROLL_OVER, onRollOverHandler);
    btnPlay.addEventListener(MouseEvent.ROLL_OUT, onRollOutHandler);
    btnPlay.addEventListener(MouseEvent.MOUSE_DOWN, onPressHandler);
    btnPlay.addEventListener(MouseEvent.MOUSE_UP, onReleaseHandler);
    
    btnPlay.buttonMode = true;
    btnPlay.useHandCursor = true;
    
    function onRollOverHandler(myEvent:MouseEvent):void {
        btnPlay.gotoAndStop(2);
    }
    
    function onRollOutHandler(myEvent:MouseEvent):void {
        btnPlay.gotoAndStop(1);
    }
    
    function onPressHandler(myEvent:MouseEvent):void {
        btnPlay.gotoAndStop(3);
    }
    
    function onReleaseHandler(myEvent:MouseEvent):void {
        btnPlay.gotoAndStop(2);
    }
    
    // Same code for btnQuit here, but replace btnPlay with btnQuit
    

    除了向每个按钮添加新的EventListener,这些按钮几乎与我上面所做的相同,有没有一种方法可以将按钮本身传递给MouseEvent函数?(我意识到这可能很难,因为所有按钮都是自己的类)

    btnPlay.addEventListener(MouseEvent.ROLL_OVER, onRollOverHandler(btnPlay));
    btnPlay.addEventListener(MouseEvent.ROLL_OUT, onRollOutHandler(btnPlay));
    btnPlay.addEventListener(MouseEvent.MOUSE_DOWN, onPressHandler(btnPlay));
    btnPlay.addEventListener(MouseEvent.MOUSE_UP, onReleaseHandler(btnPlay));
    
    function onRollOverHandler(myEvent:MouseEvent, inButton:MovieClip):void {
        inButton.gotoAndStop(2);
    }
    
    function onRollOutHandler(myEvent:MouseEvent, inButton:MovieClip):void {
        inButton.gotoAndStop(1);
    }
    
    function onPressHandler(myEvent:MouseEvent, inButton:MovieClip):void {
        inButton.gotoAndStop(3);
    }
    
    function onReleaseHandler(myEvent:MouseEvent, inButton:MovieClip):void {
        inButton.gotoAndStop(2);
    }
    
    2 回复  |  直到 11 年前
        1
  •  1
  •   Dave    11 年前

    也许我误解了,但“event.target”为您提供了已单击按钮的参考。因此,如果您想对单击的按钮执行某些操作,可以编写:

    myEvent.target.gotoAndStop(1);
    

    或者有时您可能需要使用“currentTarget”。您仍然需要为每个函数创建侦听器,但可以使用一组处理程序。

        2
  •  0
  •   Craig    11 年前

    简单的回答是:不。您可能会遇到一些麻烦来重写MouseEvent类,并允许它发送额外的参数,但在这种情况下为什么要麻烦呢?你似乎没有保存任何代码。

    轻微更新:

    这是对原始代码的一个可能有用的简化。它节省了几行代码,只使用一个处理程序函数。显然,“trace”语句可以被各种“gotoAndStop()”语句替换:

    btnPlay.addEventListener(MouseEvent.ROLL_OVER, HandleAll);
    btnPlay.addEventListener(MouseEvent.ROLL_OUT, HandleAll);
    btnPlay.addEventListener(MouseEvent.MOUSE_DOWN, HandleAll);
    btnPlay.addEventListener(MouseEvent.MOUSE_UP, HandleAll);
    
    function HandleAll(e)
    {
        if (e.type == "rollOver")  trace("rollover");
        if (e.type == "rollOut")   trace("rollout");
        if (e.type == "mouseDown") trace("mousedown");
        if (e.type == "mouseUp")   trace("mouseup");
    }