点線・破線
- 2008 年 4月 30 日
ActionScriptで点線・破線を描いてみます。
サンプル
This movie requires Flash Player 10.0.0
Flashは、アプリケーションからは点線・破線を描くオプションが用意されているのに、ActionScriptには無い訳です。
大概、斜め読みでマニュアルを読んで当然描けると思っていると、いざ点線を描くって時に焦るわけです。(←自分)
色々方法はあると思いますが直線を分割してlineToで描く方法で試した時の記録です。
これもいい加減もともと描けるようになっててよ!って思います。
点線を描きたい訳で点線を描くスクリプトを作りたいわけじゃない訳っす。
点線・破線はWeb Designだと定番って位、よく使うデザイン要素じゃないだろうか。このBLOGなんて点線だし!
package cc.px2.as3{ import flash.display.Graphics; import flash.geom.Point; public class Ni_DotLine{ public function Ni_DotLine( target:Graphics, seg:Number=20, xx:Number=0, yy:Number=0 ):void{ this.target= target; this.now= new Point( xx, yy ); this.seg= seg; this.rest= 0; this.flag= false; } public var target: Graphics; public var seg: Number; public var now: Point; public var rest: Number; public var flag: Boolean; public function dotLineTo( xx:Number, yy:Number ):void{ var s:Point= new Point( now.x, now.y ); var e:Point= new Point( xx, yy ); var d:Number= Point.distance( s, e ); now.x = e.x; now.y = e.y; rest = (seg * 1 < rest) ? rest - seg * Math.floor( rest / seg ) : rest; if(d <= rest){ rest -= d; if(flag){ target.lineTo( e.x, e.y ); flag = (rest == 0) ? false : true; } else{ target.moveTo( e.x, e.y ); flag = (rest == 0) ? true : false; } return void; } var m:Number = 1 / ( d / seg ); var n:Number = 1 / ( d / rest ); for( var i:Number=1-n; 0<i; i-=m ){ var a:Point = Point.interpolate( s, e, i ); if(flag){ target.lineTo( a.x, a.y ); flag = false; } else{ target.moveTo( a.x, a.y ); flag = true; } if( i - m < 0 ){ var b:Point = Point.interpolate( s, e, i - m ); var c:Point = Point.interpolate( s, e, 0 ); rest = Point.distance( e, b ); if(flag){ target.lineTo( c.x, c.y ); } else{ target.moveTo( c.x, c.y ); } } } } } } |
無駄の多いソースで恥ずかしい…。