勉強してたらコレでマシンがフリーズっとくらぁ!
花火の勉強
/**
* Copyright sdkfz181tiger ( http://wonderfl.net/user/sdkfz181tiger )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/8tV5
*/
//花火の勉強
package{
import flash.events.Event;
import flash.events.TimerEvent;
import flash.display.Sprite;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.display.BlendMode;
import flash.display.PixelSnapping;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.utils.Timer;
[SWF(width="465",height="465",backgroundColor="0x000000",flameRate="30")]
public class Index extends Sprite{
private const WIDTH:Number = 465;
private const HEIGHT:Number = 465;
private var _particles:Array;
private var _canvas:BitmapData;
private var _glow:BitmapData;
private var _rect:Rectangle;
private var _cTra:ColorTransform;
private var _timer:Timer;
private var _sx:Number;
private var _sy:Number;
public function Index(){
init();
}
private function init():void{
_particles = [];
//キャンバス
_canvas = new BitmapData(WIDTH,HEIGHT,false,0x0);
addChild(new Bitmap(_canvas)) as Bitmap;
//グロー
_glow = new BitmapData(WIDTH/4,HEIGHT/4,false,0x0);
var _bm:Bitmap = addChild(new Bitmap(_glow,PixelSnapping.NEVER,true)) as Bitmap;
_bm.scaleX = _bm.scaleY = 4;
_bm.blendMode = BlendMode.ADD;
//Rect
_rect = new Rectangle(0,0,WIDTH,HEIGHT);
_cTra = new ColorTransform(.8,.8,.9,1.0);
this.stage.addEventListener(Event.ENTER_FRAME,onEFrame);
_timer = new Timer(1000);
_timer.addEventListener(TimerEvent.TIMER,onTEvent);
_timer.start();
}
private function onTEvent(event:TimerEvent):void{
(_cTra.redMultiplier > 0.9)? _cTra.redMultiplier = 0.8 : _cTra.redMultiplier += 0.01;
hanabi();
}
private function hanabi():void{
var _i:int = 200;
_sx = Math.random() * WIDTH;
_sy = Math.random() * HEIGHT/3;
while(_i--) createParticle();
}
private function createParticle():void{
var _p:Particle = new Particle();
_p.x = _sx;
_p.y = _sy;
var _radius:Number = Math.sqrt(Math.random()) * 20;
var _angle:Number = Math.random() * (Math.PI) * 2;
_p._vx = Math.cos(_angle) * _radius;
_p._vy = Math.sin(_angle) * _radius;
_particles.push(_p);
}
private function onEFrame(event:Event):void{
update();
}
private function update():void{
_canvas.lock();
_canvas.applyFilter(_canvas,_rect,new Point(),new BlurFilter(1,1));
_canvas.colorTransform(_rect,_cTra);
var _i:int = _particles.length;
while(_i--){
var _p:Particle = _particles[_i];
_p._vy += 0.2;
_p._vx *= 0.9;
_p._vy *= 0.9;
_p.x += _p._vx;
_p.y += _p._vy;
_canvas.setPixel32(_p.x, _p.y, _p._c);
if((_p.x > stage.stageWidth || _p.x < 0) || (_p.y < 0 || _p.y > stage.stageHeight) || Math.abs(_p._vx) < .01 || Math.abs(_p._vy) < .01){
this._particles.splice(_i,1);
}
}
_canvas.unlock();
_glow.draw(_canvas,new Matrix(0.25,0,0,0.25));
}
}
}
class Particle{
public var x:Number = 0;
public var y:Number = 0;
public var _vx:Number = 0;
public var _vy:Number = 0;
public var _c:uint = 0xFFFFFFFF;
public function Particle(){
}
}