ActionScript 3.0 - альтернативные объявления прослушивателей событий? - PullRequest
1 голос
/ 08 сентября 2010

У меня есть некоторый код actioncript 3.0 внутри файла. Этот код управляет несколькими элементами на его сцене. Каждый из этих элементов имеет события Over, Out и Click.

В настоящее время я определяю эти прослушиватели событий так:

mc_hotspot.addEventListener(MouseEvent.MOUSE_OVER, lift);
mc_hotspot.addEventListener(MouseEvent.MOUSE_OUT, setDown);
mc_hotspot.addEventListener(MouseEvent.CLICK, select);;
mc_spinspot.addEventListener(MouseEvent.MOUSE_OVER, spinspotOver);
mc_spinspot.addEventListener(MouseEvent.MOUSE_OUT, spinspotOut);
mc_spinspot.addEventListener(MouseEvent.CLICK, spinClick);
mc_spinspot2.addEventListener(MouseEvent.MOUSE_OVER, spinspot2Over);
mc_spinspot2.addEventListener(MouseEvent.MOUSE_OUT, spinspot2Out);
mc_spinspot2.addEventListener(MouseEvent.CLICK, spin2Click);
btn_back.addEventListener(MouseEvent.MOUSE_OVER, backOver);
btn_back.addEventListener(MouseEvent.MOUSE_OUT, backOut);
btn_back.addEventListener(MouseEvent.CLICK, backClick);

Как видите, это очень длинный и запутанный способ определения событий для этих элементов, а также есть функция, запускаемая по событию, для каждого из них.

Я буду расширять проект, чтобы добавить еще три спин-спота и еще одну-две кнопки, и мне было просто интересно, есть ли какой-нибудь другой способ определения и обработки этих событий.

В случае spinspots все события over и out одинаковы, но у каждого есть своя дублирующая функция и слушатель.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 08 сентября 2010

Вы можете просто создать функцию, такую ​​как:

function addButtonEvents(mc:*,over:Function,out:Function,click:Function = null) {
    mc.addEventListener(MouseEvent.MOUSE_OVER,over,false,0,true);
    mc.addEventListener(MouseEvent.MOUSE_OUT,out,false,0,true);

    //if we have an optional click event
    if (click != null)
         mc.addEventListener(MouseEvent.CLICK,click,false,0,true);

}

тогда вы можете добавить все три события одним вызовом, т.е.

addButtonEvents(mc_spinspot, spinspotOver, spinspotOut, spinClick);
1 голос
/ 08 сентября 2010

лучший способ - через инкапсуляцию, обычно состояния over и out влияют только на элемент over или out, поэтому вы можете создать класс spinspot и обработчики over и out в этом и беспокоиться только об обработчике click вродительский класс.

в противном случае вы можете иметь один обработчик over, out и click, а затем отсортировать действие по цели события (if (ev.target == mc_spinspot)) и т. Д., Сделав так, что вы также можете иметь функцию assignEvents, которая дает over, out инажмите респондентов на переданную переменную

private function addEvents(obj:Sprite){
    obj.addEventListener(MouseEvent.MOUSE_OVER, overHandler);
    obj.addEventListener(MouseEvent.MOUSE_OUT, outHandler);
    obj.addEventListener(MouseEvent.CLICK, clickHandler);

}
addEvents(mc_spinspot);
...