Plasma v2
...a work in progress.
♥0 |
Line 63 |
Modified 2012-09-10 03:00:11 |
MIT License
archived:2017-03-30 09:07:19
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/nJy2
*/
package
{
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.utils.ByteArray;
import flash.events.Event;
import flash.events.MouseEvent;
public class Plasma extends Sprite
{
private var w:Number = 400
private var h:Number = 200
private var time:Number = 0
private var a:Number = 1
private var b:Number = 2
private var c:Number = 1
private var d:Number = 1
private var e:Number = 1
private var sin:Array = new Array( 512 )
private var img:ByteArray = new ByteArray()
private var bd
//private var data = new 4); // array of Bytes
//private var buff = new Uint8Array (data ); // two "views" on the same array
public function Plasma()
{
stage.frameRate = 60;
for (var i=0; i<512; i++) sin[i] = Math.floor(Math.sin(2*Math.PI/512*i) * 127 + 127);
// write as3 code here..
bd = new BitmapData(w, h, true, 0x00000000);
var bm = new Bitmap(bd);
bm.scaleX = stage.stageWidth/w;
bm.scaleY = stage.stageHeight/h;
stage.addChild(bm);
stage.addEventListener(Event.ENTER_FRAME, onEF);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMD);
}
private function onEF(ev)
{
visualize();
bd.setPixels(bd.rect, img);
time++;
}
private function visualize()
{
img.position = 0;
var hh = h*0.5 +10*d-400;
var hw = w*0.5 +10*e-400;
var fr = time<<2, i3 = 1/3;
var am = a-1, bm = b-1, es = e<<2;
for(var i=0; i<h; i++) // rows
for(var j=0; j<w; j++) // columns
{
var di = Math.floor( Math.sqrt((hh-i)*(hh-i) + (hw-j)*(hw-j)) );
var hi = (sin[(j*b+fr)&511]+sin[(di*a+fr*b)&511]+sin[359-(i*a+j*b+fr)&511])*i3;
var re = sin[((hi << am)+d) & 511];
var gr = sin[((hi << bm)+es) & 511];
var bl = sin[ (hi << bm) & 511];
var col:uint = (255<<24 | bl<<16 | gr<<8 | re);
img.writeUnsignedInt(col);
}
img.position = 0;
}
private function onMD(ev) { a = rand(4); b = rand(4); c = rand(8); d = rand(180); e = rand(180); }
private function rand(n) { return 1+Math.floor(Math.random()*n); }
}
}