что такое dispatchEvent во Flash AS3? - PullRequest
7 голосов
/ 06 декабря 2009

Привет всем, я хочу знать, что такое dispatchEvent in AS3 . Я не понял, пока гуглил это. :( Поэтому, пожалуйста, помогите мне

Редактировать 1:

public static  const SET_VOLUME:String = "setVolume";

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

        }

что это значит ?? (

Ответы [ 4 ]

14 голосов
/ 07 декабря 2009

Пример может помочь? Если у вас есть 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;
}

Этот код демонстрирует, как addEventListener и dispatchEvent являются аналогами. Событие MOUSE_MOVE отправляется изнутри, но вы можете отправлять свои собственные события точно так же, как MOUSE_MOVE , используя dispatchEvent .

Что происходит в этом коде, так это то, что MOUSE_MOVE со сцены обнаруживается, но вместо обработки этого в mouseMoveListener вы отправляете другое событие (называемое myCustomEvemt ), который обрабатывается в myCustomEventListener . Он работает так же, как событие MOUSE_MOVE , только вы отправили событие вместо флэш-плеера.

Надеюсь, это поможет.

4 голосов
/ 31 октября 2011

Скажем, есть два класса: A и B. Теперь вы хотите, чтобы «functionAfterMyFun» происходил после того, как myFun произошел в классе B. Затем вы должны использовать dispatchEvent в функции класса b myfun ().

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"));
}


}
3 голосов
/ 06 декабря 2009

По сути, это механизм уведомления объектов о том, что что-то произошло. Когда вы отправляете событие, что-то должно быть прослушано для этого события.

Это в основном похоже на телефонный звонок (dispatchEvent (новый CallEvent (CallEvent.CALL))). Если человек, которому вы пытаетесь позвонить, отсутствует, он не слушает телефонное событие, поэтому он ничего не может с этим поделать. Если они находятся в (addEventListener (CallEvent.Call, answerHandler)), они могут ответить на него, возможно, отправить его прямо в голосовую почту.

Для полного изложения попробуйте прочитать эту статью из Adobe.

http://www.adobe.com/devnet/actionscript/articles/event_handling_as3_02.html

Множество языков программирования используют события, поэтому очень полезно разобраться с ними.

Джеймс

Ответ на Edit1

Мне кажется, у вас есть метод, настроенный для обработки MouseEvent. Нажмите где-нибудь на объекте. Когда это происходит, он устанавливает другое свойство scaleX объекта в 0 (делая его невидимым). Затем отправляется новое событие с типом, установленным в «setVolume». Это само по себе ничего не сделает. Где-то еще это, вероятно, строка, похожая на addEventListener ("setVolume", doSomethingMethod); , Когда запускается оригинальный метод (по-видимому, щелчком мыши), должен запускаться метод doSomethingMethod.

0 голосов
/ 12 января 2016

addaddEventListener() похоже на заключение брачного соглашения.
Например, если у вашей жены есть другой мужчина снаружи, вы получите 100 долларов от своей жены. К счастью, это происходит.
dispatchEvent() означает, что вы получите $ 100.

...