flash on 2011-5-6 http://levitated.net/daily/levInvaderFractal.html bongiovi015 forked:0favorite:15lines:120license : MIT License modified : 2011-05-07 13:14:38 Embed Tweet package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.filters.ColorMatrixFilter; import flash.filters.DropShadowFilter; import flash.geom.ColorTransform; import flash.geom.Point; import flash.geom.Rectangle; import caurina.transitions.Tweener; public class FlashTest extends Sprite { public static const THRESHOLD : int = 20000; public static const MIN_SCALE : Number = .2; public static const W : int = 465; public static const H : int = 465; public static const RECT : Rectangle = new Rectangle(0, 0, W, H); public static const RED : ColorMatrixFilter = new ColorMatrixFilter( [0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]); public var MAX_SCALE : Number = 2.5; private var __bmpdFilled : BitmapData = new BitmapData(W, H, true, 0x00000000); private var __bmpdTest : BitmapData = new BitmapData(W, H, true, 0x00000000); private var __scale : Number = 0; private var __pos : Point; private var __first : Boolean = true; public function FlashTest() { stage.addEventListener(MouseEvent.CLICK, reset); stage.addEventListener(Event.ENTER_FRAME, __loop); filters = [new DropShadowFilter(3, 45, 0, .35, 6, 6, 1, 3)]; } public function reset(e:Event=null) : void { __bmpdFilled.fillRect(RECT, 0); while(numChildren>0) removeChildAt(0); __first = true; MAX_SCALE = 2.5; stage.removeEventListener(Event.ENTER_FRAME, __loop); stage.addEventListener(Event.ENTER_FRAME, __loop); } private function __loop(e:Event) : void { var i : int = 0; const ITERATION:int = 5; while(i++<ITERATION) render(); if(__bmpdFilled.histogram()[3][0] < THRESHOLD){ stage.removeEventListener(Event.ENTER_FRAME, __loop); } } public function render() : void { __scale = MIN_SCALE; var tx:Number, ty:Number; const MAX_TRIES : int = 100; var numTry : int = 0; do { tx = Math.floor(Math.random() * W / Invader.WIDTH / MIN_SCALE) * Invader.WIDTH * MIN_SCALE; ty = Math.floor(Math.random() * H / Invader.WIDTH / MIN_SCALE) * Invader.WIDTH * MIN_SCALE; numTry ++; if(numTry > MAX_TRIES) return; } while (__bmpdFilled.getPixel32(tx, ty) != 0x00000000 || __bmpdFilled.hitTest(new Point, 255, new Rectangle(tx, ty, Invader.WIDTH * __scale, Invader.WIDTH * __scale))); while( !__bmpdFilled.hitTest(new Point, 255, new Rectangle(tx, ty, Invader.WIDTH * __scale, Invader.WIDTH * __scale) ) && __scale < MAX_SCALE){ __scale += .05; } __scale -= 0.05; __bmpdFilled.fillRect(new Rectangle(tx, ty, Invader.WIDTH * __scale, Invader.WIDTH * __scale), 0xFFFFFFFF); var invader:Invader = new Invader(0x000000); addChild(invader); invader.x = tx; invader.y = ty; invader.scaleX = invader.scaleY = __scale; invader.alpha = 0; Tweener.addTween(invader, {time:.5, transition:"easeOutSine", alpha:1}); if(__first && (tx + Invader.WIDTH * __scale) < stage.stageWidth && (ty + Invader.WIDTH * __scale) < stage.stageHeight ) { invader.filters = [RED]; __first = false; MAX_SCALE = 1.8; } } } } import flash.display.BitmapData; import flash.display.Sprite; class Invader extends Sprite { public static const W : int = 10; public static const MARGIN : int = 3; public static const WIDTH : int = W * 5 + MARGIN * 2; public var color : uint; private var __ary : Array = []; public function Invader(color:uint) : void { this.color = color; __init(); } private function __init() : void { var i:int=0, j:int=0; var tx:Number, ty:Number; for(i=0; i<2; i++) { for(j=0; j<5; j++) { tx = i*W + MARGIN; ty = j*W + MARGIN; if( Math.random() > .5 ) { graphics.beginFill(color, 1); graphics.drawRect(tx, ty, W, W); graphics.endFill(); graphics.beginFill(color, 1); graphics.drawRect(W*4 - tx + MARGIN*2 , ty, W, W); graphics.endFill(); } } } for(j=0; j<5; j++) { tx = 2*W + MARGIN; ty = j*W + MARGIN; if( Math.random() > .5 ) { graphics.beginFill(color, 1); graphics.drawRect(tx, ty, W, W); graphics.endFill(); } } } } Code Fullscreen Preview Fullscreen Thy tjoen makishima miniapp gaina fakestar0826.. kleinschmidt.. cobersky djankey satosu xor qwertyui : CODE xingyeqishi : bitmapcool invaders Hasufel : invaders hidrodixtion.. : cool CODE bitmap cool invaders color Rectangle MouseEvent.ENTER_FRAME removeEventListener removeChildAt addEventListener numChildren DropShadowFilter filters Math.floor scaleY alpha scaleX Tweener.addTween MouseEvent.CLICK time addChild Boolean Math.random Array