flash on 2014-12-16
♥0 |
Line 99 |
Modified 2014-12-16 04:40:44 |
MIT License
archived:2017-03-30 11:51:23
ActionScript3 source code
/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/13wR
*/
package {
import flash.events.MouseEvent;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
vecBlob = new Vector.<xBlob>(0,false);
canvas = new BitmapData(460, 460, false, 0);
var dat:BitmapData;
dat = new BitmapData(128, 128, true, 0);
dat.noise(2143);
wx = 128 + 64; wy = 128+64;
bdExplo(dat, 128, 128, 8,8);
stage.addEventListener(MouseEvent.CLICK, onClick);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public function onClick(e:MouseEvent):void
{
var dat:BitmapData;
dat = new BitmapData(128, 128, true, 0);
dat.noise(2143);
wx = stage.mouseX; wy = stage.mouseY;
bdExplo(dat, 128, 128, 8,8);
}//onclick
public var wx:Number = 0;
public var wy:Number = 0;
public var pow:Number = 8.0;
public function getMag(ax:Number, ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
public function bdExplo(bd:BitmapData,cx:Number,cy:Number, cw:int=16, ch:int=16):void
{
var w:int; var h:int; var i:int; var k:int;
var a:xBlob; var d:Number;
vecBlob = new Vector.<xBlob>(0,false);
w = bd.width; h = bd.height;
d = w > h ? w : h;
for (i = 0; i < h; i+=cw)
{
for (k = 0; k < w; k+=ch)
{
a = new xBlob();
a.dat = bd;
a.rect.x = k; a.rect.y = i;
a.rect.width = cw; a.rect.height = ch;
a.cx = cx+k; a.cy = cy+i;
//a.vx = -2; a.vy = -2;
var ang:Number; var mag:Number;
ang = Math.atan2(a.cy-wy, a.cx-wx);
ang += Math.random()*0.1;
mag = getMag(a.cy-wy, a.cx-wx);
mag = d - mag; if (mag < 0) { mag = 0.1; } mag /=d;
mag +=0.2;
mag*= pow;
a.vx = Math.cos(ang)*mag;
a.vy = Math.sin(ang)*mag;
vecBlob.push(a);
}//nextk
}//nexti
}//bdexplo
public var canvas:BitmapData;
public var vecBlob:Vector.<xBlob>;
public var dp:Point = new Point();
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2,0);
canvas.fillRect(canvas.rect, 0);
var i:int; var num:int; var a:xBlob;
num = vecBlob.length;
for (i = 0; i < num; i++)
{
a = vecBlob[i];
a.vy += 0.09;
if (a.vx >0 && a.cx > 430) { a.vx*=-0.25; }
if (a.vx <0 && a.cx < 0) { a.vx*=-0.25; }
if (a.vy >0 && a.cy > 430) { a.vy*=-0.25; a.vy+=Math.random()*0.5; }
if (a.vy <0 && a.cy < 0) { a.vy*=-0.25; }
a.cx += a.vx; a.cy += a.vy;
dp.x = a.cx; dp.y = a.cy;
canvas.copyPixels(a.dat, a.rect, dp);
}//nexti
graphics.beginBitmapFill(canvas, null,false,false);
graphics.drawRect(0,0,460,460);
graphics.endFill();
}//onenter
}//classend
}
import flash.geom.Rectangle;
import flash.display.BitmapData;
internal class xBlob
{
public var cx:Number = 0;
public var cy:Number = 0;
public var vx:Number = 0;
public var vy:Number = 0;
public var dat:BitmapData;
public var rect:Rectangle = new Rectangle();
}//xblob