Инкапсулируйте действие, чтобы оно могло быть выполнено из события мыши ИЛИ анимации ИЛИ какого-либо окончания - PullRequest
0 голосов
/ 21 сентября 2010

У меня часто есть функция / действие, выполняемое для события мыши (скажем, MouseEvent.CLICK), которое необходимо переместить в:

  • , происходящее внутри анимации (в данном кадреметка)
  • происходит на событии (скажем, Event.COMPLETE)
  • происходит, когда другой элемент добавляется на сцену или удаляется со сцены

Что такоелучший способ ООП инкапсулировать такие действия, чтобы я не переписывал свой код постоянно?

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

Ответы [ 3 ]

1 голос
/ 21 сентября 2010

Вы можете настроить свой обработчик событий так, чтобы он принимал один параметр, подобный следующему:

protected function actionHandler(e:Event = null):void {
    //handler code here.
}

Затем вы можете ссылаться на него через MouseEvent, все, что расширяет Event, или вызывать его без предоставления параметра в тех случаях, когдаэто не обусловлено событиями.Тестирование типа e (или если e равно нулю) в обработчике может дать вам более точный контроль над тем, что делать в определенных обстоятельствах.

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

0 голосов
/ 21 сентября 2010

Если несколько объектов имеют общие функции, вы можете создать абстрактный класс, который ваши объекты могли бы подклассить.

public class MyDisplayObjectAbstract extends MovieClip
{
     protected function mouseEventListener(event:Event):void
     {
          gotoAndStop('frameLabel')
     }

     protected function completeEventListener(event:Event):void
     {
        //do whatever
     }
}

Затем вы можете связать свои объекты с классом, как показано ниже, и при необходимости переопределить некоторые функции

public class ObjectOne extends MyDisplayObjectAbstract
{
   override protected function mouseEventListener(event:Event):void
   {
       //do whatever
   }
}
0 голосов
/ 21 сентября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...