Flash AS3中的dispatchEvent是什么?

8

大家好,我想了解在AS3中dispatchEvent是什么。 在谷歌上搜索后没有得到任何想法。:( 所以请帮帮我。

编辑1:

public static  const SET_VOLUME:String = "setVolume";

private function onclick(evt:MouseEvent):void {
            soundClip.scaleX = 0;
            dispatchEvent(new Event(SET_VOLUME));

        }

这是什么意思?()

2
@coderex,请在问题得到解答时将其标记为已回答! - alecmce
4个回答

15

可能举个例子会更好理解一些。如果你有Flash IDE,在时间轴上试试这个:

var ball:Shape = new Shape();
ball.graphics.beginFill(0xFF0000);
ball.graphics.drawCircle(0, 0, 30);
ball.graphics.endFill();
addChild(ball);

stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
addEventListener("myCustomEvent", myCustomEventListener);

function mouseMoveListener(event:MouseEvent):void
{
    dispatchEvent(new Event("myCustomEvent"));
}

function myCustomEventListener(event:Event):void
{
    ball.x = stage.mouseX;
    ball.y = stage.mouseY;
}

这段代码演示了 addEventListenerdispatchEvent 的对应关系。虽然 MOUSE_MOVE 事件是内部分发的,但您可以像使用 MOUSE_MOVE 一样使用 dispatchEvent 分发自己的事件。

在此代码中发生的是检测到来自舞台的 MOUSE_MOVE,但不是在 mouseMoveListener 中处理它,而是分发另一个事件(称为 myCustomEvemt),该事件由 myCustomEventListener 处理。它的工作方式与 MOUSE_MOVE 事件相同,只是您分发了该事件而非 Flash 播放器。

希望这可以帮助您。


请不要忘记在文件开头添加以下导入语句: import flash.display.Stage; import flash.display.Shape; import flash.display.Graphics; import flash.events.*谢谢,alecmce 最好的问候 - tatactic

6
假设有两个类:A 和 B。现在你想要在类 B 中的函数 myFun() 发生后执行 "functionAfterMyFun"。那么你应该在类 B 的函数 myFun() 中使用 dispatchEvent。
class A 
{

function A()
{
  objectOfB.addEventListener( "myFun_Happened",  functionAfterMyFun)
}

function functionAfterMyFun()
{
    //do something after myFun has happened in class B 
}

}

class B
{
function myfun()
{
dispatchEvent(new Event("myFun_Happened"));
}


}

1067:将类型为String的值隐式转换为不相关的类型flash.events:Event。:( 我是否缺少导入? - Papa De Beau
dispatchEvent (new Event ("myFun_Happened")); - Vishwas
好的解释!简短明了。因此,任何对事件分派器对象感兴趣并具有访问权限的人都可以监听该对象。 - AturSams

3
基本上它是一种通知对象发生事件的机制。当您分派事件时,需要有某些内容来监听该事件。
这就像打电话一样(dispatchEvent(new CallEvent(CallEvent.CALL)))。如果您试图拨打电话的人不在场,则他们无法听取电话事件,因此无法采取任何行动。如果他们在场(addEventListener(CallEvent.Call, answerHandler)),他们可以接听电话,也许将其直接发送到语音邮件。
为了全面了解,请尝试阅读来自Adobe的本文。 http://www.adobe.com/devnet/actionscript/articles/event_handling_as3_02.html 许多编程语言都使用事件,因此掌握它非常值得。
詹姆斯
回答Edit1:
在某个地方设置了一个方法来处理某个对象的MouseEvent.Click事件。当它发生时,它会将另一个对象的scaleX属性设置为0(使其不可见)。然后分派新事件,类型设置为“setVolume”。仅凭这样做不会有任何作用。其他地方可能会有一行看起来类似于addEventListener("setVolume", doSomethingMethod); 。当触发原始方法(似乎是鼠标单击)时,doSomethingMethod应该会触发。

好的,我有一个疑问,请查看我的问题编辑1:部分。 - coderex
当 onclick() 被调用时,"setVolume" 将被触发,通知任何订阅者(通过调用 addEventListener 订阅 "setVolume")。 - Richard Szalay

-2

addaddEventListener() 就像是让你的婚前协议生效一样。
例如,如果你的妻子和别的男人有染,你将从你的妻子那里得到100美元。幸运的是,这种情况并没有发生。
dispatchEvent() 意味着你将得到100美元。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接