package { import flash.display.Sprite; import flash.events.MouseEvent; [SWF(backgroundColor="#000000", frameRate=60)] public class FlashTest extends Sprite { public function FlashTest() { // write as3 code here.. stage.addEventListener(MouseEvent.MOUSE_MOVE, createSquare); } public function createSquare(e:MouseEvent):void { new Square(this, stage.mouseX, stage.mouseY, 128, 128, 3); } } } import flash.display.DisplayObjectContainer; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; internal class Square extends Sprite { private var _root :DisplayObjectContainer; private var _width :Number; private var _height :Number; private var _ttl :uint; private var _life :uint; public function Square(root:DisplayObjectContainer, x:Number, y:Number, width:Number, height:Number, ttl:uint) { this.x = x; this.y = y; this._root = root; this._width = width; this._height = height; this._life = 0; this._ttl = ttl; this.graphics.beginFill(0xFF9900, 1); this.graphics.drawRect( -this._width / 2, -this._height / 2, this._width, this._height); this.graphics.endFill(); this._root.addChild(this); this.addEventListener(Event.ENTER_FRAME, update); } public function update(e:Event):void { if (this._life < 4) { this.graphics.clear(); this.graphics.beginFill(0xFF9900 - this._life * 0x221100, 1); this.graphics.drawRect( -this._width / 2 + this._life, -this._height / 2 + this._life, this._width - this._life, this._height - this._life); this.graphics.endFill(); this._life++; } else { this.removeEventListener(Event.ENTER_FRAME, update); this._root.removeChild(this); if (this._ttl != 0) { var crtWidth:Number = this._width - 2 * this._life; var crtHeight:Number = this._height - 2 * this._life; var crtX:Number = this.x - crtWidth / 4; var crtY:Number = this.y - crtHeight / 4; for (var i:int = 0; i < 2; i++) for (var j:int = 0; j < 2; j++ ) new Square(this._root, crtX + j * crtWidth / 2, crtY + i * crtHeight / 2, crtWidth / 2, crtWidth / 2, this._ttl - 1); this._ttl--; } } } } Split Squares