スポンサーサイト

-------- | --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[ActionScript 3.0] 元の位置に戻すTween

2008-01-20 | 00:00

Tweenerで_bezierを使うと直線でなくベジエ曲線に沿った移動が行える。これをうまく利用して、一度別な位置に移動して元に戻ってくるような移動を一回のTweenで実行できる。
↓のデモでは、マウスクリックでボールがジャンプして元の位置に戻ります。
トランジッションの種類の数だけボールはありますが、一つ一つのボールは一度のTweenで動かしているだけです。


追記:
よく見ると想定外の動きをしているボールがいくつか・・・。
トランジッションタイプとベジエ曲線の制御点の組み合わせによってはうまくいかないようです。

package{
        import flash.display.*;
        import flash.events.*;
        import flash.geom.*;
        import flash.utils.*;
        
        import caurina.transitions.Tweener;
        
        [SWF(width="500", height="200",backgroundColor="0xffffff")]
        
        public class BezierJump extends Sprite{
                
                private var balls:Array = [];
                private var processing:Boolean = false;
                
                private var Y:int = 150;
                private var INTERVAL:int = 15;
                private var RADIUS:int = 5;
                
                private var transitions:Array = ["linear",
                "easeInSine", "easeOutSine", "easeInOutSine",
                "easeInQuad", "easeOutQuad", "easeInOutQuad",
                "easeInCubic", "easeOutCubic", "easeInOutCubic",
                "easeInQuart", "easeOutQuart", "easeInOutQuart",
                "easeInQuint", "easeOutQuint", "easeInOutQuint",
                "easeInExpo", "easeOutExpo", "easeInOutExpo",
                "easeInCirc", "easeOutCirc", "easeInOutCirc",
                "easeInElstic", "easeOutElstic", "easeInOutElstic",
                "easeInBack", "easeOutBack", "easeInOutBack",
                "easeInBounce", "easeOutBounce", "easeInOutBounce" ];
                
                public function BezierJump(){
                        
                        for(var i:int = 0 ; i < transitions.length ; i++){
                                
                                var c:int = ((i*5) << 16) + ((i*5) << 8);
                                var b:Ball = new Ball(c,RADIUS);
                                
                                balls.push(b);
                                addChild(b);
                                b.x = i*INTERVAL+RADIUS;
                                b.y = Y;
                        }
                        
                        stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
                }
                
                private function mouseDown(e:Event):void{
                        var i:int = 0;
                        for each(var b:Ball in balls){
                                Tweener.addTween(b, {x:b.x, y:b.y,
                                                                  _bezier:[{x:b.x, y:20}, {x:b.x, y:20},],
                                                                  time:3, transition:transitions[i++]} );
                        }
                }
        }
}

import flash.display.*;

internal class Ball extends Sprite{
        
        public function Ball(color:int, radius:int){
                
                graphics.beginFill(color);
                graphics.drawCircle(0,0,radius);
                graphics.endFill();
        }
}

スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。