Показать сообщение отдельно
Старый 16.07.2010, 12:25
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 8  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
нет, не совсем ))

ключевое - событие диспатчится (генерируется) на нижнем уровне, а слушается на верхнем.

Но именно так писать нельзя.

Добавлено через 21 минуту
Вот, как-то так. Работоспособность не проверял, но должно работать

1. Наверху создаем локацию и ставим слушателя. AppEvent - это собственный класс события, позволяющий передавать параметры.

Код AS3:
	public class Controller extends Sprite
	{
		private var location:Location;
 
		public function Controller() : void
		{
			setLocation();
		}
 
		private function setLocation() : void
		{
			location = new Location();
			location.addEventListener("eventFromPers", eventFromPersHandler);
			addChild(location);
		}
 
		private function eventFromPersHandler(e:AppEvent) : void
		{
			trace("Поступило событие от перса: ", e.data);
		}
	}
2. На уровне локации ничего не делаем, просто ставим перса:

Код AS3:
	public class Location extends Sprite
	{
		private var pers:Pers;
 
		public function Location() : void
		{
			setPers();
		}
 
		private function setPers() : void
		{
			pers = new Pers();
			addChild(pers);
		}
 
	}
3. На уровне перса обрабатываем нажатие на кнопку и отсылаем событие наверх

Код AS3:
	public class Pers extends Sprite
	{	
		private var persMC:PersMC; // мувик из библиотеки с кнопкой sendEvent
 
		public function Pers() : void
		{
			initPers();
		}
 
		private function initPers() : void
		{
			persMC = new persMC();
			persMC.sendEvent.addEventListener(MouseEvent.CLICK, mouseClickHandler);
			addChild(persMC);
		}
 
		private function mouseClickHandler(e:Event) : void
		{
			var eventData:String = "с персом все в порядке";
			var appEvent:AppEvent = new AppEvent("eventFromPers",eventData,true)
			dispatchEvent(appEvent);
		}
 
	}
Собственный класс события для передачи параметра, как вариант:

Код AS3:
	public class AppEvent extends Event {
 
		protected var _data:Object;
 
		public function AppEvent(type:String, data:Object, bubbles:Boolean = false, cancelable:Boolean = false) {
			_data = data;
			super(type, bubbles, cancelable);
		}
 
		override public function clone():Event {
			return new AppEvent(type, data, bubbles, cancelable);
		}
 
		public function get data():Object { return _data; }
	}


Последний раз редактировалось mikhailk; 16.07.2010 в 12:50.