Blaster
♥0 |
Line 90 |
Modified 2013-01-24 21:58:43 |
MIT License
archived:2017-03-20 08:53:54
ActionScript3 source code
/**
* Copyright GreekFellows ( http://wonderfl.net/user/GreekFellows )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/3Nnh
*/
package {
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.display.Sprite;
public class Absorption extends Sprite {
public var core:Sprite;
public var holes:Array;
public var particles:Array;
public var canvas:Sprite;
public var sourceBitmapData:BitmapData;
public var renderBitmapData:BitmapData;
public var bitmap:Bitmap;
public const PARTICLES_MAX:int = 100;
public function Absorption() {
core = new Sprite();
holes = [];
particles = [];
canvas = new Sprite();
sourceBitmapData = new BitmapData(465, 465);
renderBitmapData = new BitmapData(465, 465);
bitmap = new Bitmap(renderBitmapData);
this.addChild(bitmap);
this.addEventListener(Event.ENTER_FRAME, everything);
}
public function everything(e:Event):void {
// add particles if there aren't 10 (variable) of them
if (particles.length < PARTICLES_MAX) {
if (true) {
// through thorough consideration
// decided to shoot them out from the bottom right corner
particles.push(
{
x:445,
y:445,
ax:-Math.random() * 50 / 100,
ay:-Math.random() * 50 / 100,
radius:Math.ceil(Math.random() * 5),
bounces:5
}
);
}
}
canvas.graphics.clear();
canvas.graphics.beginFill(0, 1);
canvas.graphics.drawRect(0, 0, 465, 465);
canvas.graphics.endFill();
// move and draw particles
for (var pi:int = 0; pi < particles.length; pi++) {
var cpar:Object = particles[pi];
// move!
cpar.x += cpar.ax;
cpar.y += cpar.ay;
cpar.ax += (Math.random() * 100 - 50) / 100;
cpar.ay += (Math.random() * 100 - 50) / 100;
if (cpar.x < 0 || cpar.x > 465 || cpar.y < 0 || cpar.y > 465) {
if (cpar.bounces-- <= 0) {
particles.splice(pi, 1);
break;
} else {
if (cpar.x < 0) {
cpar.x = 0;
cpar.ax = Math.abs(cpar.ax);
}
if (cpar.x < 465) {
cpar.x = 465;
cpar.ax = -Math.abs(cpar.ax);
}
if (cpar.y < 0) {
cpar.y = 0;
cpar.ay = Math.abs(cpar.ay);
}
if (cpar.y < 465) {
cpar.y = 465;
cpar.ay = -Math.abs(cpar.ay);
}
}
}
if (Math.abs(cpar.ax) > 10) {
cpar.ax *= 0.5;
}
if (Math.abs(cpar.ay) > 10) {
cpar.ay *= 0.5;
}
// draw!
canvas.graphics.beginFill(0xffffff, 1);
canvas.graphics.drawCircle(cpar.x, cpar.y, cpar.radius);
canvas.graphics.endFill();
}
sourceBitmapData.draw(canvas);
renderBitmapData.copyPixels(sourceBitmapData, new Rectangle(0, 0, 465, 465), new Point(0, 0));
}
}
}