droplets
forked from forked from: メタボールの練習 (diff: 18)
import net.hires.debug.Stats;
ActionScript3 source code
/**
* Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/zFP1
*/
// forked from dhaya's forked from: メタボールの練習
// forked from a24's メタボールの練習
package
{
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Graphics;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.geom.ColorTransform;
import flash.filters.BlurFilter;
public class MetaBall extends Sprite
{
private var _size:int = 150;
private var _num:int = 3;
private var blurr:BlurFilter = new BlurFilter(16,16,3);
private var _canvas:BitmapData = new BitmapData( 600, 600 , true , 0x00000000 );
private var _bmpData:BitmapData = new BitmapData( 600, 600 , true , 0x00000000 );
private var _rect:Rectangle = new Rectangle( 0 , 0 , 600 , 600 );
private var _objAry:Array = new Array();
private var _alphaArray:Array = new Array();
private var _container:Sprite = new Sprite();
private var _moving:Boolean = false;
public function MetaBall()
{
r _container.alpha = 0;
addChild( _container );
stage.addEventListener(MouseEvent.MOUSE_DOWN, onContainerMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onContainerMouseUp);
var adjust:Number = _size / 1000;
var matrix:Matrix = new Matrix();
matrix.identity();
matrix.scale( adjust , adjust );
for ( var i:uint = 0; i < _num; i ++ )
{
var sp:Sprite = new Sprite();
drawGradationCircle( sp.graphics , matrix );
sp.x = 135 + 150 * int( i % 2 );
sp.y = 135 + 150 * int( i / 2 );
sp.addEventListener(MouseEvent.MOUSE_DOWN, onSpMouseDown);
sp.addEventListener(MouseEvent.MOUSE_UP, onSpMouseUp);
_container.addChild( sp );
_objAry.push( sp );
}
addChild( new Bitmap( _canvas ) );
for ( var j:int = 0; j < 256; j ++ )
{
if ( j < 200 ) _alphaArray.push( 0 );
else _alphaArray.push( 0xFF000000 );
}
addEventListener( Event.ENTER_FRAME , enterFrameHandler );
}
private function onSpMouseDown(e:MouseEvent):void
{
(e.currentTarget as Sprite).startDrag();
}
private function onSpMouseUp(e:MouseEvent):void
{
(e.currentTarget as Sprite).stopDrag();
}
private function onContainerMouseDown(e:MouseEvent):void
{
_moving = true;
}
private function onContainerMouseUp(e:MouseEvent):void
{
_moving = false;
}
private function enterFrameHandler( e:Event ):void
{
this.filters = [blurr];
_bmpData.fillRect( _rect , 0xCCCCCC );
_bmpData.draw( _container );
_bmpData.paletteMap( _bmpData , _rect , _rect.topLeft , null , null , null , _alphaArray );
_canvas.fillRect( _canvas.rect, 0xffffff);
_canvas.draw( _bmpData );
moveBalls();
}
private function moveBalls():void
{
if (_moving) {
for each ( var s:Sprite in _objAry ) {
s.x = s.x;
s.y = s.y;
s.blendMode = "difference";
}
}
}
private function drawGradationCircle( g:Graphics , m:Matrix ):void
{
g.beginGradientFill( "radial", [ 0 , 0], [ 1 , 0 ] , [ 110 , 255 ] , m );
g.drawCircle( 0 , 0 , _size );
g.endFill();
}
}
}