Создайте свои собственные события в Actionscript3, как это действительно работает? - PullRequest
0 голосов
/ 21 июля 2011

Я постараюсь быть объективным :) Я хотел бы знать, как и почему кто-то должен будет создать ваше собственное событие. Я действительно знаю, как это сделать, но я не понимаю, как это сделать. Не могли бы вы привести пример с объяснением того, почему вы создаете свое собственное событие!?

Я ищу этот ответ в Интернете, но так и не нашел его ...

И извините за мой английский:)

Ответы [ 4 ]

2 голосов
/ 22 июля 2011

Давайте попробуем сравнить шаблон наблюдателя с «ручной» системой уведомления объекта ... Я уверен, что все были виноваты в этом, когда начали программировать.

public class GameX{
   public function GameX(){
      var b = new Button(this); //we send a reference to button
   }
   public function buttonAction(){
       //do something based on this
   }
}

public class Button(){
   private var listener:
   public function Button(listener:GameX){
      this.listener = listener;
      someButtonThing();
   }
   public someButtonThing(){
      listener.buttonAction();
   }
}

Позволяет перебирать проблемы, с которыми можно столкнуться с этим кодом ...

1) Я хочу использовать класс Button в другой игре, GameY? Это проблема?

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

2) Я хочу слушать одновременно GameYComponent1 и GameYComponent2! Могу ли я это сделать?

Опять же, вы можете «обмануть» и изменить этот код, но опять же, вы должны изменить класс Button, и, опять же, он не будет столь же стандартизирован, как шаблон наблюдателя (вещь событий). И много раз вы просто не можете ... лучшее, что вы можете сделать, это подкласс от него. Чтобы много работать. Также не стандартизировано.

3) Вам нужен какой-то очень сложный механизм отправки событий, например, список экранных объектов в as3 имеет (извините, сейчас я не могу найти хорошую ссылку для этого в сети, если кто-то может отредактировать это позже, пожалуйста, добавьте ссылку в).

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

В любом случае, так я бы объяснил парню, который впервые за 15 минут программировал, зачем использовать события или пользовательские события. Это позволяет избежать головной боли для всех участников.

Для более всестороннего изучения, пожалуйста, воспользуйтесь этими ссылками (я только что обмолвился об этих вещах, но здесь должна быть доля правды):

Если у кого-то есть больше, лучше добавить ссылки, не стесняйтесь.

Кроме того, это хорошо, потому что немного помогает с инкапсуляцией, чем меньше класс Button знает о мире, и наоборот, тем лучше (не вдаваясь в подробности, и опять же, кто-то может объяснить это лучше):

Если у кого-то есть больше, лучше добавить ссылки, не стесняйтесь.

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

Скажите, имеет ли это для вас смысл.

1 голос
/ 22 июля 2011

Пост, который я сделал, когда возвращался к пользовательским событиям .

Пользовательские события просто дают вам гораздо больший контроль над структурой событий в вашем приложении.Может быть, самое главное, имеет ли смысл семантическое отношение к той или иной операции: успешно загружен XML?огонь MyEvent.XML_LOAD_COMPLETE.

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

Что смехотворно удобно.

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

1 голос
/ 22 июля 2011

Я создам свое собственное событие, когда мне нужно будет хранить больше информации об объекте события.Таким образом, когда я обрабатываю событие в слушателе, у меня есть доступ к необходимым данным без необходимости сохранять их в объекте event.target.

В качестве примечания я обнаружил библиотеку сигналов чтобы лучше достичь этого.

1 голос
/ 22 июля 2011

Я создаю свои собственные события для всего.Скажем, например, у меня есть Спрайт, у которого есть дочерний Спрайт.Дочерний Sprite постоянно меняет цвет, основываясь на массиве значений цвета.Я хочу сообщить некоторым другим спрайтам, что этот спрайт теперь красный, но я не знаю, когда это произойдет, потому что он случайным образом перебирает массив цветов.Дочерний спрайт может вызвать событие, когда это условие выполнено, и любой, кто его слушает, может среагировать на него.

В противном случае каждый, кто должен знать, когда этот спрайт красный, должен спросить ребенка, а вы?красный, ты красный, ты красный?

...