ITween を parallel して serial
BetweenAS3 でなにか動かしてみたサンプル
*
* 1. しこたま ITween のインスタンス作る (NUM_BALLS の数と同じ)
* 2. それを parallel につっこむ
* 3. parallel したやつと、それの reverse したやつを serial につっこむ
* 4. stopOnComplete なフラグを false にして無限ループ
/**
* 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);
}
}
}