180bpm
점선 그리는 클래스 본문
반응형
Main.as
DotLine.as
import DotLine; /** * 점선을 그려주는 클래스 * AS 2.0으로 바꿨다. * @author deb */ class Main { /** * 생성자를 대체하는 함수 * @param swfRoot */ //private dLine:DotLine; public static function main(swfRoot:MovieClip):Void { // entry point var mc:MovieClip = new MovieClip(); mc = swfRoot.createEmptyMovieClip('mcLine', 1); var dLine = new DotLine(); dLine.lineStyle(mc,32); dLine.dotStyle(); dLine.lineTo(100, 200); } /** * 생성자 * 사용되지 않는다 */ public function Main() { } }
DotLine.as
import flash.display.*; import flash.geom.*; import mx.data.encoders.Num; /** * ... * @author deb */ class DotLine extends MovieClip { private var _graphics:MovieClip; private var _matrix:Matrix = new Matrix(); private var _colors:Array=[0, 0, 0, 0]; private var _alphas:Array=[0, 0, 0, 0]; private var _ratios:Array=[0, 0, 0, 0xFF]; private var _px:Number = 0; private var _py:Number = 0; private var _line:Number = 4; private var _spacing:Number = 4; private var _lineLength:Number = 8; private var isDebug:Boolean = false; public function DotLine() { if(isDebug) trace("create DotLine Class"); } /** * 선의 속성을 지정해주는 메서드 * @param $graphics 그림이 그려질 대상 * @param $thickness 두께 NaN * @param $color 색 0 * @param $alpha 투명도 100 * @param $pixelHinting 외각선을 정리할 것인가 false * @param $noScale 스케일에 따라 선 두께도 굵어질것인가 normal, none, vertical * @param $capsStyle 선 끝을 둥글게 처리할것인가, 아니면 감쌀것인가 null * @param $jointStyle 선이 꺾이면 어떻게 처리할것인가 null * @param $miterLimit $jointStyle 속성을 사용하면 어느정도 길이에서 자를것인가 3 * @see http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#lineStyle() */ public function lineStyle($graphics:MovieClip, $thickness:Number, $color:Number, $alpha:Number, $pixelHinting:Boolean,$noScale:String, $capsStyle:String, $jointStyle:String, $miterLimit:Number):Void { if(isDebug) trace("into lineStyle method"); _graphics = $graphics; trace(_graphics); /*if (!$thickness) { $thickness = NaN; } if (!$color) { $color = 0; } if (!$alpha) { $alpha = 100; } if (!$pixelHinting) { $pixelHinting = false; } if (!$noScale) { $noScale = "normal"; } if (!$capsStyle) { $capsStyle = null; } if (!$jointStyle) { $jointStyle = null; } if (!$miterLimit) { $miterLimit = 3; }*/ $thickness = $thickness || NaN; $color = $color || 0; $alpha = $alpha || 100; $pixelHinting = $pixelHinting || false; $noScale = $noScale || "normal"; $capsStyle = $capsStyle || "none"; $jointStyle = $jointStyle || null; $miterLimit = $miterLimit || 3; _colors[0] = $color; _colors[1] = $color; _colors[2] = $color; _colors[3] = $color; _alphas[0] = $alpha; _alphas[1] = $alpha; if (_graphics) { _graphics.lineStyle($thickness, $color, $alpha, $pixelHinting, $noScale, $capsStyle, $jointStyle, $miterLimit); }//if } /** * 점선의 속성을 지정해주는 메서드 * @param $line 선이 보이는 길이 * @param $spacing 선이 안보이는 길이 */ public function dotStyle($line:Number, $spacing:Number):Void { if(isDebug) trace("into dotStyle method"); if (!$line) { $line = 4; } if (!$spacing) { $spacing = 4; } _line = $line; _spacing = $spacing; _lineLength = _line + _spacing; //line과 spaceing을 합한 값에서 Line의 비율을 얻어 255를 곱한다 var n:Number = $line / ($line + $spacing) * 0xFF; _ratios[1] = n - 0.1; _ratios[2] = n + 0.1; } private var _decx:Number = 0; private var _decy:Number = 0; /** * 시작점을 이동하는 메서드 * @param $x * @param $y */ public function moveTo($x:Number, $y:Number):Void { if (isDebug) trace("into moveTo method"); _px = $x || 0; _py = $y || 0; _decx = 0; _decy = 0; _graphics.moveTo(_px,_py); } public function lineTo($x:Number, $y:Number):Void { var x:Number, y:Number, r:Number; x = $x - _px; y = $y - _py; _decx = (x % _lineLength)*2/2; _decy = (y % _lineLength)*2/2; trace(y % _lineLength); //http://gall.dcinside.com/list.php?id=flash&no=1296 r = Math.atan2(y, x); x = $x + Math.cos(r) * x; y = $y + Math.sin(r) * y; /*그래디언트 박스를 만든다 * 가로,세로, 각도, 이동 거리, 이동거리 * 그러니까 시작점은 해당 선의 시작점이고 그 주위로 repeat 하면서 뿌려지는 방식이다. */ _matrix.createGradientBox(_lineLength, _lineLength, r , _px - _decx, _py - _decy); if (isDebug) { trace("Colors : " + _colors); trace("_alphas : " + _alphas); trace("Colors : " + _ratios); trace("_matrix : " + _matrix.toString() ); } //trace ("createGradientBox : " + x + ", " + y + ", " + r + ", " + $x + ", " + $y + ", " + _px + ", " + _py + ", " + _decx + ", " + _decy); _graphics.lineGradientStyle("linear", _colors, _alphas, _ratios, _matrix, "repeat", "linearRGB", 0); _graphics.lineTo($x, $y); _px = $x; _py = $y; }
}
반응형
Comments