package { import flash.display.Sprite; import flash.geom.Rectangle; /** * ... * @author ... */ public class Tategaki extends Sprite { public function Tategaki() { graphics.lineStyle(1, 0xA0EBF3); GraphicsUtils.drawGrid(graphics, new Rectangle(5, 5, 460, 460), 50); GraphicsUtils.drawGrid(graphics, new Rectangle(5, 5, 460, 460), 25, Vector.<Number>([2.5,2.5])); } } } import flash.display.Graphics; import flash.geom.Point; import flash.geom.Rectangle; class GraphicsUtils { public function GraphicsUtils() { ; } public static function drawGrid(g:Graphics, rect:Rectangle, size:Number, pattern:Vector.<Number> = null):void { var i:Number; var limitW:Number; var limitH:Number; limitW = rect.x + rect.width; limitH = rect.y + rect.height; if (pattern == null) { i = rect.y; while (i < limitH) { g.moveTo(rect.x, i); g.lineTo(limitW, i); i += size; } i = rect.x; while ( i < limitW) { g.moveTo(i, rect.y); g.lineTo(i, limitH); i += size; } }else { i = rect.y; while (i < limitH) { drawDotLine(g, rect.x, i, limitW, i, pattern); i += size; } i = rect.x; while (i < limitW) { drawDotLine(g, i, rect.y, i, limitH, pattern); i += size; } } } public static function drawDotLine(g:Graphics, fromX:Number, fromY:Number, toX:Number, toY:Number, pattern:Vector.<Number>):void { var i:int; var n:Number; var v:Point = new Point(toX - fromX, toY - fromY); var tmp:Point; var l:Number = v.length; var sl:SimpleList = new SimpleList(); var s:Boolean = true; v.normalize(1); for (i = 0; i < pattern.length; i++) { n = pattern[i]; tmp = v.clone(); tmp.normalize(n); sl.append({v:tmp, length:n}); } var pos:Point = new Point(fromX, fromY); var obj:Object; n = 0; g.moveTo(pos.x, pos.y); while (true) { obj = sl.next(); n += obj.length; if (n > l) { pos.x = toX; pos.y = toY; s = step(g, pos, s); break; }else { pos.offset(obj.v.x, obj.v.y); s = step(g, pos, s); } } } private static function step(g:Graphics, p:Point, s:Boolean):Boolean { if (s) { g.lineTo(p.x, p.y); }else { g.moveTo(p.x, p.y); } return !s; } } class SimpleList { private var currentElement:ListElement; private var appendFunc:Function; public function SimpleList(data:* = null) { if (data != null) { _initialize(data); }else{ appendFunc = _initialize; } } public function append(data:*):void { appendFunc.call(null, data); } public function _initialize(data:*):void { currentElement = new ListElement(data); currentElement.next = currentElement; currentElement.prev = currentElement; appendFunc = _append; } public function _append(data:*):void { var elem:ListElement = new ListElement(data); var tmp:ListElement; tmp = currentElement.next; currentElement.next = elem; elem.prev = currentElement; elem.next = tmp; tmp.prev = elem; currentElement = elem; } public function current():*{ return currentElement.data; } public function next():* { currentElement = currentElement.next; return currentElement.data; } public function prev():*{ currentElement = currentElement.prev; return currentElement.data; } } class ListElement { public var next:ListElement; public var prev:ListElement; public var data:*; public function ListElement(data:*) { this.data = data; } } Draw Grid