Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 我可以将一个按钮传递到它自己的MouseEvent函数中吗?_Actionscript 3_Flash_Movieclip - Fatal编程技术网

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

Actionscript 3 我可以将一个按钮传递到它自己的MouseEvent函数中吗?,actionscript-3,flash,movieclip,Actionscript 3,Flash,Movieclip,我在FlashDevelop中发布了多个MovieClip符号(在我的示例中,我只使用2)。每个都有3个框架作为默认值,悬停并单击我正在使用的按钮 private var btnPlay:PlayButton, btnQuit:QuitButton; btnPlay = new PlayButton(); btnQuit = new QuitButton(); btnPlay.addEventListener(MouseEvent.ROLL_OVER, onRollOverHandler);

我在FlashDevelop中发布了多个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
除了向每个按钮添加新的EventListeners之外,还有什么方法可以将按钮本身传递给MouseEvent函数呢?(我意识到这可能很困难,因为所有按钮都是它们自己的类)


简单回答:不。重写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");
}

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

myEvent.target.gotoAndStop(1);

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

好的,谢谢。看起来它是每个按钮的自定义MouseeEvent函数。实际上,它是标准的侦听器函数。但没关系。我把你的回答标记为“否”,然后戴夫用我想要的实际答案回答。此外,您更新的方法不允许我以调用事件的按钮为目标,这是必须的。在您的“一组处理程序”中,您如何传递帧号以停止,而不重新编写“MouseeEvent”类?哦。我希望您使用标准的电影剪辑来显示按钮,以便帧编号保持不变。但是,如果将类附加到按钮,然后将帧编号存储为按钮的属性,则仍然可以使用此方法。因此,创建一个类似BasicButton的类,并将其附加到退出和播放按钮。然后通过公共变量或getter和setter(如“overFrameNum”数字变量)在BasicButton上创建属性。然后,您的事件处理程序应该包含:“myEvent.target.gotoAndStop(myEvent.target.overFrameNum);我不太明白这一点。在OP的问题中,gotoAndStop()帧编号随事件类型而变化,而不是随按钮(其中只有1个)而变化。”。那么如何告诉你的侦听器函数停止在哪个帧上呢?你不能按照原始答案使用常量,这样你就可以用“myEvent.target.gotoAndStop(1)”表示退出,用“myEvent.target.gotoAndStop(2)”表示结束了吗?或者你可以像我说的那样将帧存储在按钮上,只分配相同的值,这样你就可以用“btnPlay”。overFrameNum=2“和”btnQuit。overFrameNum=2“我考虑了一下。请在我的答案中查看我的编辑。谢谢。
myEvent.target.gotoAndStop(1);