- 2008-04-17 22:39
- papervision3d
前回のエントリの続きで、もうすこしマシな2.5次元アニメーションを作ってみました。
クリックするとadamrockerが奇麗にグチャっとなります。
動作が分かりやすいようワイヤーフレームを横に出しています。
アニメーション部分
クリックするとアニメーションするようになっています。
クリックの動作を定義しているメソッドは以下の通りです。
//--------------------------------------------mouse click private function clickObj (e:MouseEvent):void { var arr:* = obj.geometry.vertices; var wires:* = wireObj.geometry.vertices; if(isTween) { movePoints(arr, 30, 40); movePoints(wires, 30, 40); isTween = false; }else { movePoints(arr, -30, -40); movePoints(wires, -30, -40); isTween = true; } scene.renderCamera(camera); }
movePoints()メソッドが各格子点を動かしています。
movePoints()メソッドは以下のようになっています。
private function movePoints(arr:*, y:Number, z:Number):void { var num:Number = 0; for each(var o:* in arr) { var diffZ:Number = 0; var tmp:int = (num / (segment + 1)); if((num + tmp) % 2 == 0) { diffZ = z; } var diffY:Number = (num % (segment + 1)) * y; movePoint(o, 0, diffY, diffZ); num++; } }
第一引数には格子点が格納された配列です、第二引数はy方向の移動量で、第三ひきすうはz方向の移動量です。
x方向へは移動しませんので、この関数では定義していません。
for eachスコープの中では、ちょっとした細工をしています。こういう計算で関数をシンプルにするのがプログラミングの楽しいところですよね。ちゃんと下から偶数段の格子だけがz方向に飛び出してくるようにしています。
Tweenerで実際に格子点を移動させるのはmovePoint()メソッドです。
これは以前と同じメソッドで、以下のように定義しています。
private function movePoint(p:*, diffX:Number, diffY:Number, diffZ:Number):void { Tweener.addTween(p, { x:(p.x + diffX), y:(p.y + diffY), z:(p.z + diffZ), time:1, delay:0, transition:"easeOutElastic"}); }
おわりに
ちゃんと動かすと、それなりの動作をしますねw
関連のありそうなエントリ
- Newer: AndroidのFile I/Oベンチマーク
- Older: Papervision3DとTweenerで2.5Dアニメーション
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.adamrocker.com/blog/203/papervision3d_and_tweener_make_25dimension_2.html/trackback/
- Listed below are links to weblogs that reference
- Papervision3DとTweenerで2.5Dアニメーション その2 from throw Life
