var bWidth:int = 60; var bHeight:int = 40; var innerWidth:int = 20; var innerHeight:int = 15; var restartDelay:int = 1000; var rowSize:int = int(stage.stageWidth / bWidth); var colSize:int = int(stage.stageHeight / bHeight); var currentOrder:Vector.; var currentContainer:Sprite; cycle(); function cycle():void { currentOrder = randomOrder; currentContainer = new Sprite(); addChild(currentContainer); var t:Timer = new Timer(randomTime, rowSize * colSize); t.addEventListener(TimerEvent.TIMER, next, false, 0, true); t.start(); } function next(e:TimerEvent):void { var t:Timer = e.target as Timer; var count:int = t.currentCount; var b:Shape = box; var position:int = currentOrder[int(count - 1)]; t.delay = randomTime; b.x = int(position / rowSize) * bWidth; b.y = int(position % rowSize) * bHeight; currentContainer.addChild(b); if(count == t.repeatCount - 1){ setTimeout(cleanUp, restartDelay, t); } } function cleanUp(t:Timer):void { removeChild(currentContainer); t.removeEventListener(TimerEvent.TIMER, next); cycle(); } function get box():Shape { var b:Shape = new Shape(); b.graphics.beginFill(uint(Math.random() * 0xffffff)); b.graphics.drawRect(0, 0, bWidth, bHeight); b.graphics.endFill(); b.graphics.beginFill(uint(Math.random() * 0xffffff)); b.graphics.drawRect(int(Math.random() * (bWidth - innerWidth)), int(Math.random() * (bHeight - innerHeight)), innerWidth, innerHeight); b.graphics.endFill(); return b; } function get randomOrder():Vector. { var len:int = rowSize * colSize; var order:Vector. = new Vector.(len); for(var i:int = len - 1; i > -1; i--){ order[i] = i; } randomize(order); return order; } function get randomTime():int { return int(Math.random() * 100 + 30); } function randomize(v:Vector.):void { var len:int = v.length; var i:int = len; while(--i > -1){ var index:int = int(Math.random() * len); var swap:int = v[index]; v[index] = v[i]; v[i] = swap; } }