Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > FAQ

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.05.2006, 10:07
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 1  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
По умолчанию [as3] Передача параметров обработчику события

Перед прочтением советуется ознакомиться с топиком [as3] Создание и рассылка своих собственных событий

Бывают случаи когда обработчику события нужно передать определенные параметры, разберем абстрактный случай, например у нас есть класс наслейдующий от Sprite, класс рассылает специально событие changed, которое рассылается при изменении размера, позиции или добавлении дочерних DisplayObject'ов.
Для этого мы создадим собственное событие ( класс наслейдующий flash.events.Event ) с возможностью записи "типа изменения".

Класс события
Код:
package com.onorange.faq.events {
    import flash.events.Event;
    
    public class ChangeEvent extends Event{
        private var __changeType:String;
        //создамим константу, содержащую в себе названия события.
        public static const CHANGED:String = "changed";
        
        //Создаем константы содержащие в себе типы изменения
        public static const POSITION:String = "position";
        public static const SIZE:String = "size";
        public static const CHILD:String = "child";
        
        //создаем конструктор
        public function ChangeEvent(type:String,changeType:String) {
             super(type);
             __changeType = changeType;
        }
        //создаем метод акксесор
		public function get changeType():String {
             return __changeType;
		}
    }
}
Теперь создадим класс который будет рассылать данные события
Код:
package com.onorange.faq.display {
	import com.onorange.faq.events.ChangeEvent;
	import flash.display.Sprite;
	import flash.display.DisplayObject;
     
	public class ChangeDispatcher extends Sprite{
          
		public function ChangeDispatcher() {
			super();
			//больше нам ничего от конструктора не надо
		}
         
		//переопределяем методы addChild
		public override function addChild(child:DisplayObject):DisplayObject {
			//рассылаем наше событие, при создании события задаем дополнительный параметр
			dispatchEvent(new ChangeEvent(ChangeEvent.CHANGED,ChangeEvent.CHILD));
              
			return super.addChild(child);               
		}          
          
        //методы для изменения размера и позиции
          
		public function setSize(width:Number,height:Number):void {
       		this.width = width;
       		this.height = height;
       		dispatchEvent(new ChangeEvent(ChangeEvent.CHANGED,ChangeEvent.SIZE));
		}
		
		public function setPosition(x:Number,y:Number):void {
			this.x = x;
			this.y = y;
			dispatchEvent(new ChangeEvent(ChangeEvent.CHANGED,ChangeEvent.POSITION));
		}
    }
}
Ну и собственно проверяем
Код:
package {
	import com.onorange.faq.display.ChangeDispatcher;
	import com.onorange.faq.events.ChangeEvent;
	import flash.display.Sprite;
	public class Test extends Sprite {
		public function Test() {
			var cd:ChangeDispatcher = new ChangeDispatcher();
			//подписываем обработчик
			cd.addEventListener(ChangeEvent.CHANGED,__handleEvent);
			//вызываем наши методы для проверки
			cd.setPosition(20,20);
			cd.setSize(50,50);
			cd.addChild(new Sprite());			
		}
		//со[даем обработчик
		private function __handleEvent(evt:ChangeEvent):void {
			trace(evt.changeType);
		}
	}
}
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.