AS3 Передача данных между объектами / классами - PullRequest
0 голосов
/ 28 декабря 2010

Итак, я строю категоризированное меню из разных продуктов.У меня есть класс для «категорий» (кнопок), который по существу будет возвращать строку «салаты», «напитки» и т. Д. Теперь у меня есть другой класс «menuItems» для элементов в категориях, и он обрабатывает такие размеры, как «маленький», «med "," large "и т. д. Теперь моя проблема в том, что когда я возвращаю" salads ", я хочу вызвать массив, который содержит все элементы salads, отправить его в menuItems, который будет заполнять меню.Пока у меня есть как объекты категории, так и настройки объекта меню.Кажется, я просто не могу отправить данные, которые возвращает объект категории, и передать их объекту меню.Оба из них добавляются на сцену, как показано ниже:

Если бы я мог сказать, добавьте все эти классы в один класс, чтобы они могли общаться друг с другом, что было бы здорово, но я не знаю,как это сделать

Застряли на несколько часов, пожалуйста, любая помощь очень ценится.

1 Ответ

8 голосов
/ 28 декабря 2010

Одним из распространенных способов передачи данных между объектами является отправка пользовательских событий. Это имеет преимущество уменьшения зависимости между классами. Скажем, например, что вы хотели добавить класс «Напитки» в свою структуру, если все классы связаны друг с другом, может оказаться сложным обновить ваше приложение. С другой стороны, в случае событий вы можете либо создать новое CustomEvent, либо добавить свойство напитков в текущее событие, вероятность чего-то сломаться более ограничена.

Практически вам понадобится диспетчер событий, который будет отправлять и получать события, а затем информировать соответствующий объект.

Вот широкий пример:

Возьмите каждый пакет и сохраните их в своем файле, присвоив ему имя класса с расширением .as (например, Main.as). Все файлы должны находиться в одной папке. Main.as будет вашей точкой входа, если вы используете Flash CS, это будет ваш класс документов.

Потратьте время на ознакомление с некоторыми учебниками по AS3, хотя я часто даю этот совет, поскольку он избавит вас от головной боли и затрат времени на решение основных проблем. Воспользуйтесь, например, учебным пособием по выходным сценариям Колина Мука, ​​которое вы найдете на Adobe TV.

 package
 { 
 import flash.display.Sprite;
     import flash.events.EventDispatcher;

     public class Main extends Sprite
     {
      private var dispatcher:EventDispatcher; 

      private var salads:Categories; 
      private var menu:MenuItems; 

      public function Main()
      {
          dispatcher = new EventDispatcher();
          menu = new MenuItems( dispatcher );
          salads = new Categories( dispatcher );
      }
    }
 }


                         ******
 package
 {
   import flash.events.Event;

   public class MenuEvent extends Event
   {
     //Your Custom Event
     public static const CATEGORY:String = "Category";

     //Here I type the data property as an Object, but it could also 
     //be a String , depending on the type of info you need to pass
     public var data:Object;

     public function MenuEvent( type:String , data:Object ):void
     {
       super ( type );
       this.data = data;
     }

     override public function clone():MenuEvent
     {
         return new MenuEvent( type , data );
     }

 }
                         ******
 package 
 {

 import flash.events.EventDispatcher;
 import flash.events.MouseEvent;

     public class Categories
     {

       private var dispatcher:EventDispatcher;

       public function Categories(dispatcher:EventDispatcher ):void
       {
         this.dispatcher = dispatcher;

         //for this example, i dispatch the event here
         //so you don't have to create a button...
         dispatcher.dispatchEvent( new MenuEvent( MenuEvent.CATEGORY , "salads"  ) );
       }

       private function clickHandler( event:MouseEvent ):void
       {
         //for instance , in the "salads" category...
         dispatcher.dispatchEvent( new MenuEvent( MenuEvent.CATEGORY , "salads"  ) );
       }
     }
  }

                         ******
  package 
  {

 import flash.events.EventDispatcher;

     public class MenuItems
     {            
       private var dispatcher:EventDispatcher;

       public function MenuItems(dispatcher:EventDispatcher ):void
       {
         this.dispatcher = dispatcher;
         dispatcher.addEventListener( MenuEvent.CATEGORY , menuEventHandler );
       }

       private function menuEventHandler( event:MenuEvent ):void
       {
          trace( event.data as String);
       }
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...