[BetweenAS3]SleepTween DEMO

by nitoyon
SleepTween demo.
-------------------------------------------------
一定時間停止する SleepTween を作って、花火が打ちあがったあとの
1秒間の停止を実現している。
BetweenAS3.delay() を使ってもいいのだけど、BetweenAS3.serial() で
列挙するときには、SleepTween を使った方が直感的に定義できる気がする。
将来的には、BetweenAS3.sleep() が実装されれば嬉しいかも(?)。
♥0 | Line 55 | Modified 2010-01-04 00:34:34 | MIT License
play

ActionScript3 source code

/**
 * Copyright nitoyon ( http://wonderfl.net/user/nitoyon )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/6Jf8
 */

// SleepTween demo.
//-------------------------------------------------
// 一定時間停止する SleepTween を作って、花火が打ちあがったあとの
// 1秒間の停止を実現している。
// BetweenAS3.delay() を使ってもいいのだけど、BetweenAS3.serial() で
// 列挙するときには、SleepTween を使った方が直感的に定義できる気がする。
// 将来的には、BetweenAS3.sleep() が実装されれば嬉しいかも(?)。
package {

import flash.display.*;
import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.tweens.ITween;

[SWF(width="475", height="475", backgroundColor="#000000")]
public class Test extends Sprite {
    private const NUM:int = 12;
    private const SIZE:int = 475;

    public function Test() {
        stage.scaleMode = "noScale";
        stage.align = "TL";

        var tweens1:Array = []; // 打ちあがる Tween
        var tweens2:Array = []; // 広がる Tween

        // 花火の火種を作る
        for (var i:int = 0; i < NUM; i++) {
            var d:Dot = new Dot();
            d.x = SIZE / 2;
            d.y = SIZE;
            addChild(d).rotation = i / NUM * 360;

            tweens1.push(BetweenAS3.tween(d, {y: SIZE / 2}, null, 1.0));
            tweens2.push(BetweenAS3.tween(d, {scaleX: 20, scaleY: 20, $rotation: 90}, null, 3.0));
        }

        // serial で Tween を作る。
        // ここで SleepTween を使うのがキモ
        var tween:ITween = BetweenAS3.serial(
            BetweenAS3.parallelTweens(tweens1),
            new SleepTween(1.0),
            BetweenAS3.parallelTweens(tweens2)
        );

        // リピートで Tween の再生を開始する
        tween.stopOnComplete = false;
        tween.play();
    }
}
}

import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.core.ticker.ITicker;
import org.libspark.betweenas3.core.tweens.AbstractTween;
import org.libspark.betweenas3.core.tweens.IITween;

// SleepTween の実装。
// 実は AbstactTween を継承するだけ。
// BetweenAS3.tween() で ObjectTween を作成してもいいのだが、
// ダミーのオブジェクトを用意するのがめんどくさい。
class SleepTween extends AbstractTween
{
    /**
     * static ITicker cache.
     */
    private static var _ticker:ITicker;

    /**
     * Constructor.
     *
     * @param duration sleep duration.
     * @param ticker   ticker object.
     * @param position initial position.
     */
    public function SleepTween(duration:Number = 0, ticker:ITicker = null, position:Number = 0) {
        if (!_ticker) {
            // create tmp tween to get the BetweenAS3's static ticker.
            var tmpTween:IITween = BetweenAS3.parallel() as IITween;
            _ticker = tmpTween.ticker;
        }

        super(ticker || _ticker, position);
        _duration = duration;
    }
}



import flash.display.Sprite;

class Dot extends Sprite {
    public function Dot() {
        graphics.beginFill(0xffff80);
        graphics.drawCircle(20, 0, 2);
        graphics.endFill();
    }
}