forked from: SAKURA
How to interact with this?
What inspired you?
Core logic explanation?
or requests for viewers?
If this field is left blank, description will be auto extracted from code comments.
/**
* Copyright x10der ( http://wonderfl.net/user/x10der )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/yNjZ
*/
// forked from mousepancyo's SAKURA
package
{
import flash.display.*;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.net.URLRequest;
import flash.utils.Dictionary;
import flash.system.Security;
import flash.system.LoaderContext;
[SWF(width = "1465", height = "1465", backgroundColor = "0", frameRate = "60")]
public class Main extends Sprite
{
private const NUM_SAKURA:int = 250;
private const IMG_URL:String = "http://www.digifie.jp/assets/images/sakura.png";
private var _loader:Loader;
private var _canvas:BitmapData;
private var _ctf:ColorTransform;
private var _dict:Dictionary = new Dictionary(true);
private var _sakura:BitmapData;
private var _sakuraList:Vector.<Sprite> = Vector.<Sprite>([]);
public function Main()
{
Wonderfl.capture_delay(20);
Security.loadPolicyFile("http://www.digifie.jp/crossdomain.xml");
loadImage(IMG_URL);
}
private function loadImage(url:String):void
{
var context:LoaderContext = new LoaderContext;
context.checkPolicyFile = true;
_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
_loader.load(new URLRequest(url), context);
}
private function onLoaded(e:Event):void
{
_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoaded);
_sakura = new BitmapData(_loader.width, _loader.height, true, 0);
_sakura.draw(_loader);
setup();
addEventListener(Event.ENTER_FRAME, update);
}
private function setup():void
{
_canvas = new BitmapData(1465, 1465, false, 0);
addChild(new Bitmap(_canvas));
_ctf = new ColorTransform(.75, .75, .75);
addSakura();
}
private function addSakura():void
{
var n:int = NUM_SAKURA;
while(n--){
var sak:Sprite = new Sprite();
var bmd:BitmapData = _sakura.clone();
var bm:Bitmap = new Bitmap(bmd);
sak.addChild(bm);
bm.x = -bm.width * .5;
bm.y = -bm.height * .5;
sak.scaleX = sak.scaleY = Math.random() * 1.2 + .3;
sak.x = Math.random() * 300 - 200;
sak.y = Math.random() * -500 - 100;
//sak.filters = [new BlurFilter(4, 4)];
//sak.blendMode = "add";
_dict[sak] = {vx:3 - sak.scaleX, vy:Math.random() * sak.scaleY + 1, inix:sak.x, iniy:sak.y};
addChild(sak);
_sakuraList.push(sak);
}
}
private function fall(sak:Sprite):void
{
sak.rotationX += Math.random() * 10;
sak.rotationY += Math.random() * 10;
var vx:Number = _dict[sak].vx;
var vy:Number = _dict[sak].vy;
vx = vx + (180 - (sak.rotationY % 360)) * .003;
vy = vy - (180 - (sak.rotationX % 180)) * .008;
sak.x += vx;
sak.y += vy;
if(sak.x > 1500) sak.x = _dict[sak].inix;
if(sak.y > 1500) sak.y = _dict[sak].iniy;
}
private function update(e:Event):void
{
var n:int = NUM_SAKURA;
while(n--){
fall(_sakuraList[n]);
}
_canvas.lock();
_canvas.draw(stage);
//_canvas.applyFilter(_canvas, _canvas.rect, new Point(), new BlurFilter(16, 16));
_canvas.colorTransform(_canvas.rect, _ctf);
_canvas.unlock();
}
}
}