package {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.utils.*;
import caurina.transitions.Tweener;
[SWF(width="600", height="400", frameRate="10", backgroundColor="#ffffff")]
public class RollTweener extends Sprite{
[Embed(source="lena.jpg")]
private var myImage:Class;
private var bm:Bitmap = new myImage();
private var ro:RollObject;
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 RollTweener():void
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
bm.x = 200;
bm.y = 100;
ro = new RollObject(bm);
addChild(bm);
RollUtil.init();
for(var i:int = 0 ; i < transitions.length ; i++){
var tf:TextField = new TextField();
tf.text = transitions[i];
tf.addEventListener(MouseEvent.MOUSE_DOWN, function(e:*):void{
slerp(e.target);
});
addChild(tf);
tf.y = i*12;
}
}
private function slerp(tf:TextField):void{
Tweener.addTween(ro, {time:4, _t:Math.PI*2, transition:tf.text,
onComplete:function():void{
ro.onComplete();
}
});
}
}
}
import flash.display.*;
internal class RollObject{
public var t:Number=0;
public var bm:Bitmap;
public var height:Number;
public function RollObject(o:Bitmap){
bm = o;
height = o.height;
}
public function onComplete():void{
t = 0;
}
}
import flash.geom.Matrix;
import caurina.transitions.Tweener;
internal class RollUtil{
public static function init(): void {
Tweener.registerSpecialProperty("_t", _get_t, _set_t, ["t"]);
}
protected static function _get_t(obj:Object, p_parameters:Array, p_extra:Object = null):Number
{
return obj.t;
}
protected static function _set_t(obj:Object, rad:Number, p_parameters:Array, p_extra:Object = null):void
{
trace(rad);
// 回転軸のベクトル
var vx:Number = 1;
var vy:Number = 0;
// 回転後の基底を求めて変形行列に設定
var m:Matrix = obj.bm.transform.matrix;
m.a = (1-Math.cos(rad))*vx*vx + Math.cos(rad);
m.b= (1-Math.cos(rad))*vx*vy ;
m.c = (1-Math.cos(rad))*vx*vy;
m.d = (1-Math.cos(rad))*vy*vy + Math.cos(rad);
// 変形行列の固有値を1にするため(大きさを変えないため)の係数
var s:Number = vx / (m.a*vx + m.b*vy);
m.a *= s;
m.b *= s;
m.c *= s;
m.d *= s;
obj.bm.transform.matrix = m;
var h:Number = obj.height/2;
trace(h);
obj.bm.y = h - h*Math.cos(rad) + 100;
}
}
Author:yamasv@gmail.com
コメント、トラックバック、リンクはお気軽に
-->
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| - | - | - | - | - | 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 | - | - | - | - | - | - |