Milk miyaoka forked:7 favorite:30 lines:115 license : MIT License modified : 2009-07-07 20:46:10 package { import flash.display.*; import flash.events.*; import flash.geom.*; import net.hires.debug.Stats; import flash.filters.BevelFilter; [SWF(width = "465", height = "465", backgroundColor = 0xFFFFFF, frameRate = "60")] public class Milk extends Sprite { private var bmd:BitmapData; private var ballsContainer:Sprite; private var alphaArray:Array = new Array(0x100); public function Milk() { //bg graphics.beginFill(0x0); graphics.drawRect(0, 0, SW, SH); //bmd bmd = new BitmapData(SW, SH, true); //threshold for metaball makeThreshold(0x80, 0x88); //balls ballsContainer = new Sprite(); var num:uint = 30; while (num--) { var ball:Ball = new Ball(); ballsContainer.addChild(ball); } ballsContainer.filters = [ new BevelFilter(2) ]; //add // addChild(ballsContainer); addChild(new Bitmap(bmd)); addChild(new Stats()); //evt addEventListener(Event.ENTER_FRAME, function ():void { bmd.lock(); bmd.fillRect(bmd.rect , 0); bmd.draw(ballsContainer); bmd.paletteMap(bmd, bmd.rect, new Point(), null, null, null, alphaArray); bmd.unlock(); }); } private function makeThreshold(min:uint, max:uint):void { alphaArray = []; var step:Number = 0xFF / (max - min); var i:int; //under threshold for(i = 0; i < min; i++) { alphaArray[i] = 0; } for(i = min; i < max; i++) { alphaArray[i] = uint(((i - min) * step) << 24); } //over threshold for(i = max; i < 0x100; i++) { alphaArray[i] = 0xff000000; } } } } var SW:Number = 465; var SH:Number = 465; import flash.display.*; import flash.events.*; import flash.geom.*; class Ball extends Shape { private var vct:Point; public function Ball():void { vct = new Point((Math.random() - 0.5) * 15, (Math.random() - 0.5) * 15); //draw var g:Graphics = graphics; var radius:Number = 5 + Math.random() * Math.random() * 200; var mtx:Matrix = new Matrix(); mtx.createGradientBox(radius * 2, radius * 2, 0, -radius, -radius); g.beginGradientFill( GradientType.RADIAL, [0xffffff, 0xffffff], [1, 0], [0x33, 0xff], mtx ); g.drawCircle(0, 0, radius); //evt addEventListener(Event.ENTER_FRAME, function ():void { var pos:Point = new Point(x, y).add(vct); x = pos.x; y = pos.y; checkWall(); }); } private function checkWall():void { if (x < 0) { x = 0; vct.x *= -1; } else if (x > SW) { x = SW; vct.x *= -1; } if (y < 0) { y = 0; vct.y *= -1; } else if (y > SH) { y = SH; vct.y *= -1; } } } Code Fullscreen Preview Fullscreen elbib bradsedito alexnotkin arkcocco tjoen bgarraud hems esimov cpu_t zotin95 FlashFit xor kidaipu fallen attunedesign.. Kay t_matsuda yasohachi sr_forest matsu4512 matsu ikusu sw_lucchini corleonis coppieee korooooon : エフェクト orhitsuim : metaballs grifo.tv : milk danilo : metaballs 60fps metaballs takaki8 : BitmapData 牛乳水滴 BitmapData metaballs エフェクト Math.min Math.max BevelFilter paletteMap addEventListener add GradientType.RADIAL filters beginGradientFill unlock lock Stats graphics Point fillRect drawRect rect drawCircle Matrix createGradientBox sort new page view favorite forked pv 242 forked from: Milk jmbyh521 forked:0 favorite:1 lines:115 ( diff:1 ) tag: BitmapData animation metaball particles pv 0 forked from: Milk bradsedito forked:0 favorite:0 lines:115 ( diff:1 ) pv 394 forked from: Milk Shell_Chen forked:0 favorite:0 lines:115 ( diff:3 ) pv 584 forked from: Milk danilo forked:1 favorite:1 lines:105 ( diff:25 ) pv 390 forked from: Milk bradsedito forked:0 favorite:0 lines:119 ( diff:16 ) pv 8897 Mochi miyaoka forked:11 favorite:51 lines:163 ( diff:100 ) tag: BitmapData Game Particle Physics animation blob box2d fun good metaball particals particles wonderfl最萌トーナメント 超可愛 pv 419 forked from: Milk darman forked:0 favorite:0 lines:115 ( diff:1 )