package { import flash.display.StageScaleMode; import flash.display.StageAlign; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; public class Main extends Sprite { private var tf:TextField; private var cont:Sprite; private var ary:Array = []; private var mX:Number = 5; private var mY:Number = 5; private var W:int = 30; private var H:int = 30; private var x0:Number; private var y0:Number; private var dx:Number; private var dy:Number; private var d:Number; private var _VS:Number = 0.2; private var _S:Number = 2000; public function Main() { tf = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.textColor = 0x000000; tf.defaultTextFormat = new TextFormat( "_sans", 9 ); report(); addChild(tf); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; cont = new Sprite(); create(W, H); stage.addEventListener(MouseEvent.MOUSE_DOWN, clickHandler); stage.addEventListener(Event.RESIZE, screenHandler); } private function create(yoko:int = 10, tate:int = 10):void { addChild(cont); var W:Number = 2; var H:Number = 2; var color:uint = 0x000000; var len:int = yoko * tate; var row:int = yoko; var X:Number = new Number(); var Y:Number = new Number(); for (var i:int = 0; i < len; i++) { var block:Sprite = new Sprite(); block.graphics.beginFill(color); block.graphics.drawRect(0, 0, W, H); block.graphics.endFill(); X = block.width; Y = block.height; X = i % row == 0 ? 0 : (X + mX) * (i % row); Y = Math.floor(i / row) * (Y + mY); block.x = X; block.y = Y; var pram:Object = new Object(); pram.O = block; pram.x0 = block.x; pram.y0 = block.y; ary.push(pram); cont.addChild(block); } addEventListener(Event.ENTER_FRAME, anime); screenHandler(null); } private function anime(e:Event):void { var len:int = ary.length; for (var i:int; i < len; i++) { var dx:Number = ary[i].O.parent.mouseX - ary[i].O.x; var dy:Number = ary[i].O.parent.mouseY - ary[i].O.y; var d:Number = Math.sqrt(dx * dx + dy * dy); ary[i].O.x = ary[i].O.x - _S / d * (dx / d) + (ary[i].x0 - ary[i].O.x) * _VS; ary[i].O.y = ary[i].O.y - _S / d * (dy / d) + (ary[i].y0 - ary[i].O.y) * _VS; } } private function screenHandler(e:Event):void { tf.y = stage.stageHeight - tf.height; cont.x = stage.stageWidth /2 - cont.width /2; cont.y = stage.stageHeight /2 - cont.height /2; } private function ran(max:int = 80):Number { var n:Number = Math.floor(Math.random() * max + 1); return n; } private function report() { tf.text = "W : " + String(W) + "\n" + "H : " + String(H) + "\n" + "TOTAL : " + String(W * H); } private function clickHandler(e:Event):void { var len:int = 0; len = ary.length; for (var i:int = 0; i < len; i++) { cont.removeChild(ary[0].O); ary.shift(); } mX = ran(10); mY = ran(10); W = ran(); H = ran(); report(); create(W, H); } } } Escape