In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

ITween を parallel して serial

BetweenAS3 でなにか動かしてみたサンプル
*
*  1. しこたま ITween のインスタンス作る (NUM_BALLS の数と同じ)
*  2. それを parallel につっこむ
*  3. parallel したやつと、それの reverse したやつを serial につっこむ
*  4. stopOnComplete なフラグを false にして無限ループ
Get Adobe Flash player
by soundkitchen 10 May 2009
/**
 *  BetweenAS3 でなにか動かしてみたサンプル
 *
 *  1. しこたま ITween のインスタンス作る (NUM_BALLS の数と同じ)
 *  2. それを parallel につっこむ
 *  3. parallel したやつと、それの reverse したやつを serial につっこむ
 *  4. stopOnComplete なフラグを false にして無限ループ
 */
package
{
    import flash.display.BlendMode;
    import flash.display.Graphics;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;

    import com.flashdynamix.utils.SWFProfiler;

    import frocessing.color.ColorHSV;

    import org.libspark.betweenas3.BetweenAS3;
    import org.libspark.betweenas3.tweens.ITween;
    import org.libspark.betweenas3.easing.*;

    [SWF(width=465, height=465, frameRate=30, backgroundColor=0x000000)]

    public class Main extends Sprite
    {
        public static const NUM_BALLS:uint = 120;
        public static const CIRCLE_RADIUS:uint = 170;

        private var centerX:Number;
        private var centerY:Number;

        public function Main()
        {
            addEventListener(Event.ADDED_TO_STAGE, initialize);
        }

        private function initialize(evt:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, initialize);

            setup();

            var i:uint,
                cAngle:Number, nAngle:Number,
                s:Shape, g:Graphics,
                hsv:ColorHSV,
                t:ITween,
                tweens:Array;

            cAngle = 0;
            nAngle = Math.PI * 2 / NUM_BALLS;

            hsv = new ColorHSV(0, 1, 1);

            tweens = [];
            for (i=0; i<NUM_BALLS; i++)
            {
                s = new Shape();
                s.x = centerX;
                s.y = centerY;
                s.blendMode = BlendMode.ADD;

                hsv.h = Math.sin(cAngle) * 180 / Math.PI;

                g = s.graphics;
                g.beginFill(hsv.value, hsv.a);
                g.drawCircle(0, 0, 3);
                g.endFill();

                addChild(s);

                //  ITween を作って
                t = BetweenAS3.tween(s, {
                    x: (centerX + Math.cos(cAngle) * CIRCLE_RADIUS) >> 0,
                    y: (centerY + Math.sin(cAngle) * CIRCLE_RADIUS) >> 0
                }, null, 4, Elastic.easeOut);
                //  配列につっこんどく
                tweens.push(t);

                cAngle += nAngle;
            }
            //  parallel な ITween を作って
            t = BetweenAS3.parallel.apply(null, tweens);
            //  parallel な ITween と、それを reverse したやつを serial につっこむ
            t = BetweenAS3.serial(
                t,
                BetweenAS3.reverse(t)
            );
            //  無限ループに設定して
            t.stopOnComplete = false;
            //  アニメーションスタート
            t.play();
        }

        private function setup():void
        {
            centerX = stage.stageWidth >> 1;
            centerY = stage.stageHeight >> 1;

            SWFProfiler.init(this);
        }
    }
}