Создайте свои собственные события в Actionscript3, как это действительно работает?

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

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

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

4 ответа

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

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 знает о мире, и наоборот, тем лучше (не вдаваясь в подробности, и опять же, кто-то может объяснить это лучше):

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам