Показать сообщение отдельно
Старый 01.08.2013, 00:10
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 2  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Как вариант можно подписать каждый объект на событие Event.CHANGE (Или на какое-нибудь свое MyLittleSprite.CHANGED_COORDINATES) и сделать обработчик события в одном месте, например в объекте-родителе ваших спрайтов. При изменении координат любого объекта производить диспетчиризацию события Event.CHANGE, на которое вы собственно и подписали объект, и обрабатывать это событие во внешнем обработчике. Тогда не будет никаких циклов.

На несколько задач вопрос решается аналогично - в зависимости от изменения диспетчиризуем одно, второе или третье событие. Или одно и то же событие, но с разными параметрами

Вариант с одним событием:
Код AS3:
...
//Там, где у вас добавляются CustomSprite в вектор:
public function generateSprites():void
{
	for(var i:uint = 0; i < 30; i++)
	{
		var myLittleCustomSprite:CustomSprite = new CustomSprite();
		myLittleCustomSprite.addEventListener(Event.CHANGE, somethingHappened);
		customSpriteVector.push(myLittleCustomSprite);
	}
}
 
public function somethingHappened(e:Event):void
{
	trace("Изменились координаты или того хуже");
}
...
/**
*  В вашем классе CustomSprite
*/
public function changedSomething():void
{
	dispatchEvent(new Event(Event.CHANGE));
}
Вариант с N событиями (один из):
Код AS3:
public class MyCustomEvent extends Event
{
	public MyCustomEvent(type:String, changeTracker:String , bubbles:Boolean = false, cancelable:Boolean = false)
}
...
//Там, где у вас добавляются CustomSprite в вектор:
public function generateSprites():void
{
	for(var i:uint = 0; i < 30; i++)
	{
		var myLittleCustomSprite:CustomSprite = new CustomSprite();
		myLittleCustomSprite.addEventListener(Event.CHANGE, somethingHappened);
		customSpriteVector.push(myLittleCustomSprite);
	}
}
 
public function somethingHappened(e:Event):void
{
	var receivedEvent = e as MyCustomEvent;
	switch(receivedEvent.changeTracker)
	{
		case "changedX":
			trace("Изменился Х");
			break;
		case "changedY":
			trace("Изменился Y");
			break;
		case "changedVisibility":
			trace("Изменился visibility");
			break;
	}
}
...
/**
*  В вашем классе CustomSprite
*/
public function changedSomething(changed:String):void
{
	dispatchEvent(new MyCustomEvent(Event.CHANGE, changed));
}
По моему как то так.


Последний раз редактировалось KumoKairo; 01.08.2013 в 08:37.