Tweenerを使って折れ線を描画する
2012年1月17日 火曜日
as3でTweenerを使って2点間の折れ線をアニメーション描画します。
Tweenerライブラリをインポート後、Tweener動作中に呼び出される関数onUpdateと、線を描くmoveTo、lineToを使用してまずはシンプルなラインの描画。
import caurina.transitions.*; var movePoint:Point = new Point(100,100); var dummyShape:Shape; Tweener.addTween(movePoint, { x:300, y:300, time:1, transition:"linear", onUpdate:lineDraw}); function lineDraw(){ if(dummyShape != null)stage.removeChild(dummyShape); dummyShape = new Shape(); stage.addChild(dummyShape); var g = dummyShape.graphics; g.lineStyle (5, 0xFF6600, 1.0); g.moveTo (100, 100); g.lineTo (movePoint.x, movePoint.y); }
TweenerでmovePointを移動させて、動作中に毎フレームmovePointのx,yに向けて線を描画します。
Shapeを変形して線を描くのも考えたけれど、線の調整とか角丸もありlineToで進める事に。
//lineMake関数 引数(ターゲット、時間、太さ、色、始点X、始点Y、終点X、終点Y) lineMake(mc ,1.5 ,5 ,0xFF6600 ,0 ,0 ,100 ,100); function lineMake(_targetMc,_time:Number,_vol:Number,_col,_startX:Number,_startY:Number,_endX:Number,_endY:Number){ var movePoint:Point = new Point(_startX,_startY); var drawCount:Number = 0; var pointArr:Array = new Array(); for(var i:int = 0;i < 4;i++){ //始点終点中間2点の各ポイントを配列に格納 pointArr[i] = new Point(); switch(i){ case 0: pointArr[i].x = _startX; pointArr[i].y = _startY; break; case 1: pointArr[i].x = _startX; pointArr[i].y = _startY + (_endY - _startY)/2; break; case 2: pointArr[i].x = _endX; pointArr[i].y = _startY + (_endY - _startY)/2; break; case 3: pointArr[i].x = _endX; pointArr[i].y = _endY; break; } } drawCount++; drawFunc(); function drawFunc(){ var dummyShape:Shape; Tweener.addTween(movePoint, { x:pointArr[drawCount].x, y:pointArr[drawCount].y,time:_time/3, transition:"linear",onUpdate:lineDraw,onComplete:nextFunc } ); function lineDraw(){ if(dummyShape != null)_targetMc.removeChild(dummyShape); dummyShape = new Shape(); _targetMc.addChild(dummyShape); var g = dummyShape.graphics; g.lineStyle (_vol, _col, 1.0); g.moveTo (pointArr[drawCount-1].x, pointArr[drawCount-1].y); g.lineTo (movePoint.x, movePoint.y); } function nextFunc(){ drawCount++; if(drawCount < 4)drawFunc(); } } }
上記関数を使ってデモではドラッグ&ドロップできる2点間を折れ線で繋ぎました。
(Visited 257 times, 1 visits today)
トラックバック
トラックバックURL
http://lettuce-eater.com/blog/archives/91/trackback