Flexのエフェクトの使い方(その2:Sequence編)

2010年2月14日

前回の記事にて、 Flexのエフェクトの使い方を説明したのですが、その続編として今回は複数エフェクトを連続再生 する方法(Sequenceクラスの使い方)について解説したいと思います。


例えば、Fadeエフェクトにてフェードインした後に、Moveエフェクトにて(x1, y1)から(x2, y1)に 移動するといった場合です。


この場合、Fadeエフェクトが終了した時点(EffectEvent.EFFECT_ENDイベント発生時)に、自分で定義した イベントハンドラをコールさせてMoveエフェクトを開始するといったやり方も可能ですが、

非常にコードが 冗長になってしまいます。ここで、Sequenceクラスを用いると、連続エフェクト再生がいとも簡単に 実現できてしまします。

以下は、Fade -> Moveエフェクトの連続再生の例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 親Canvasを定義
var cvs: Canvas = new Canvas();
cvs.width = 200;
cvs.height = 100;
// エフェクトをかける対象となるUIComponentを定義
var uc = new UIComponent();
uc.graphics.beginFill(0x0000ff, 0.5);
uc.graphics.drawRect(x1, y1, 100, 50);
uc.alpha = 0.5;
uc.graphics.endFill();
//Canvasにコンポーネントを登録
cvs.addChild(uc);

// fade effect 
var fade_eff: Fade = new Fade(uc);
fade_eff.duration = 1000;
// 透明から不透明にフェードするよう設定 
fade_eff.alphaFrom = 0.0;
fade_eff.alphaTo = 0.7;

// move effect 
var me: Move = new Move(uc);
// 3000ms 
me.duration = 3000;
me.xFrom = x1;
me.yFrom = y1;
// 移動距離:50pxを設定
me.xBy = 50;
me.easingFunction = Cubic.easeInOut;

// Sequenceオブジェクトを作成 
var effect_seq: Sequence = new Sequence();
// fadeエフェクトオブジェクトを登録 
effect_seq.addChild(fade_eff);
// moveエフェクトオブジェクトを登録 
effect_seq.addChild(me);
// 繰り返し回数を無限大に設定 
effect_seq.repeatCount = 0;
// 繰り返し間隔を1200msに設定 
effect_seq.repeatDelay = 1200;

上記例を見て分かるように、Sequenceクラスも他のエフェクトクラスと 使用できるメンバ・メソッドがほぼ同じです。

今まで1エフェクトに設定していた 繰り返し回数(.repeatCount)や繰り返し間隔(.repeatDelay)は、

Sequenceクラスを用いると 意味を成さなくなるので、

Sequenceクラスに対して設定するようにしましょう。


また、Flexには複数エフェクトを逐次的(シーケンシャル)ではなく、並列的(パラレル)に 実行するための枠組み: Parallelクラスも存在します。


画像を回転させながら拡大したり、 縮小させながらのフェードアウトなど、凝ったエフェクトをSequenceクラスと同様簡単に 実現することができますので、興味があったらヘルプを参照してみてください。。