Действие сценария 3 - мне нужно знать, если дочерний объект изменил свой размер ДИНАМИЧЕСКИ! Помогите? - PullRequest
1 голос
/ 14 августа 2010

Я пишу что-то вроде "динамической галереи" во флэш-памяти. Проблема в том, что дочерний элемент галереи может быть изменен во время выполнения, и тогда я должен переставить галерею.

Теперь, конечно, я не могу перегрузить элементы галереи, так как это экранный объект, который непредсказуемо. и даже если бы я мог вызвать перегрузку элементов, как я получу уведомление, если, скажем, анимация началась, что-то двигалось, а элемент стал больше ...

Существует ли какое-либо событие для экранного объекта, отправляемого при ЛЮБОМ изменении размера ??

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

1 Ответ

2 голосов
/ 15 августа 2010

Что ж, вы можете решить эту проблему двумя способами: либо дочерний объект отправляет событие, когда изменяется его размер, либо вы продолжаете прослушивать любые изменения размера с помощью события 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 );

И когда анимация заканчивается в галерее. Элемент

 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 ));
 }
...