Я пишу своего рода "динамическую галерею" во флэш-памяти. Проблема состоит в том, что ребенок галереи может быть изменен во времени выполнения, и затем я должен перестроить галерею.
Теперь, конечно, я не могу перегрузить объекты галереи, так как это - экранный объект, который непредсказуем. и даже если я мог бы вызвать перегрузку на объектах, как я буду уведомлен, если, скажем, анимация запустилась, что-то перемещается, и объект стал больше..
Есть ли своего рода Событие для экранного объекта, который диспетчеризируется на КОМ-ЛИБО, отчасти изменяют размер??
Мое немое решение состояло в том, чтобы пройти объекты всей галереи и перестроить их каждый данный миллисекунды, и теперь я чувствую себя настолько грязным, и я должен признаться в своих грехах.
Что ж, вы можете решить эту проблему двумя способами: либо дочерний объект отправляет событие, когда его размер изменяется, либо вы продолжаете прослушивать любые изменения размера с помощью события EnterFrame, последнее ближе к вашему «грязному» решению :) лично Обычно я выбираю первое решение, но это не значит, что второе решение плохое, это вопрос выбора.
Вы можете создать свое собственное.
package events
{
import flash.events.Event;
public class SizeEvent extends Event
{
public static const CHANGE:String = "Size Changed";
public var params:Object;
public function SizeEvent(type:String, params:Object)
{
super(type);
this.params = params;
}
override public function clone():Event
{
return new SizeEvent(type, params );
}
}
}
Итак, когда вы добавляете свои элементы в галерею, вы пишете следующее:
galleryItem.addEventListener(SizeEvent.CHANGE , sizeEventListener );
И когда анимация заканчивается в галерееItem
private function onAnimationComplete():void
{
var params:Object = {x: this.x , y:this.y , width:this.width ,
height:this.height, //any info you need etc... };
dispatchEvent( new SizeEvent( SizeEvent.CHANGE , params ));
}