Flexネタ

| No TrackBacks
Flexで開発してていくつかハマりネタがありました。Flexはコンポーネントのプロパティが変わると連動して動作する様々な視覚効果がクラス化されていて、とても便利です。
たとえば非表示にする操作

this.visible = false;

この時少し変わった消え方をさせたいなら、同オブジェクトにエフェクトを設定してあげると任意の消え方をします。テレビ応援団では発言の噴出しは一定時間経過すると20秒かけてじょじょに消えていきます。ですから、噴出しコンポーネントには次のように設定してあります。


            Fade hideEffect1 = new Fade(this);
            hideEffect1.alphaFrom = 1.0;
            hideEffect1.alphaTo = 0.0;
            hideEffect1.duration = 20000;
            hideEffect1.easingFunction = hideEasingFunc;
            hideEffect1.addEventListener(EffectEvent.EFFECT_END, onHideEnd);
            this.setStyle("hideEffect", hideEffect1);

このように設定したうえで、visibleにfalseを設定すると、ゆっくりうっすらと消えていくような表示になります。
そこで、このゆっくり消える途中にキャンセル操作を入れようとしてハマりました。エフェクトが中断すると設定してある関数onHideEnd()が呼び出されるのですが、この関数内でのvisibleの値はtrueなのです。
エフェクトはプロパティが変化した後に発生するのではなく、プロパティが変わる前に呼び出され、エフェクトが完了したらプロパティの値が書き換わるわけですね。ですがら、中断したのか、正常終了したのかはonHideEnd()中ではわからないのです。

この問題に対処するために、プロパティが書き換わった後(onHideEnd終了後)にプロパティみなければ判定できません。
Flexはシングルスレッドイベントディスパッチモデルで動作していますので、任意の処理を後でディスパッチスレッドに実行してもらうという機能があります。

Application.application.callLater(onHideCanceled);

このcallLaterに関数を指定すると、現在のコンテキストが終了した後にディスパッチスレッドによってonHideCanceled関数が呼びだれれるわけです。
もちろんonHideCanceled関数内ではvisibleの値はfalseでした。



No TrackBacks

TrackBack URL: http://blog.tv-oendan.jp/cgi-bin/movabletype/mt-tb.cgi/12