forked from: 偶然できたパーティクル
forked from 偶然できたパーティクル (diff: 40)
きらきら サムネ白くなるのは何でなんやろ.
ActionScript3 source code
/**
* Copyright itsukichang ( http://wonderfl.net/user/itsukichang )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/Wd68
*/
// forked from umi_kappa's 偶然できたパーティクル
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.ColorTransform;
import flash.events.Event;
import flash.display.*;
import flash.geom.Matrix;
import net.hires.debug.Stats;
[SWF(width = "465", height = "465", backgroundColor = "0x000000", frameRate = "30")]
public class FlashTest extends Sprite {
//ステージサイズ
private var _stageW:int;
private var _stageH:int;
//全てをDrawする
private var _drawCanvas:BitmapData;
//_drawCanvasが入る
private var _bmp:Bitmap;
//パーティクルの配列
private var _pVector:Vector.<Particle>;
private var _glow:BitmapData;
private var _glowMtx:Matrix;
public function FlashTest() {
init();
startEvent();
}
//--------------------------------------------------------------------------
//
// 初期化
//
//--------------------------------------------------------------------------
private function init():void {
addChild(new Stats());
_stageW = stage.stageWidth;
_stageH = stage.stageHeight;
_pVector = new Vector.<Particle>();
_drawCanvas = new BitmapData(_stageW, _stageH, true, 0x0);
_bmp = new Bitmap(_drawCanvas);
addChild(_bmp);
_glow = new BitmapData(_stageW / 4, _stageH / 4, true, 0x0);
var bm:Bitmap = new Bitmap(_glow, PixelSnapping.NEVER, true);
addChild(bm);
bm.scaleX = bm.scaleY = 4;
bm.blendMode = BlendMode.ADD;
_glowMtx = new Matrix(0.25,0,0,0.25);
}
//----------------------------------
// Start Event
//----------------------------------
private function startEvent():void {
addEventListener(Event.ENTER_FRAME, onEF);
}
//----------------------------------
// ENTER_FRAME
//----------------------------------
private function onEF(e:Event):void {
//パーティクルを生成
addParticle(mouseX, mouseY, 0, Math.random()*0.5);
//パーティクルをうごかす
moveParticle();
}
//----------------------------------
// draw
//----------------------------------
public function addParticle(x:int, y:int, vx:Number, vy:Number):void {
var _p:Particle = new Particle(x, y, vx, vy, Math.random()*0xffffffff);
_pVector.push(_p);
}
//----------------------------------
// move
//----------------------------------
public function moveParticle():void {
_drawCanvas.lock();
var _colorT:ColorTransform = new ColorTransform(1, 1, 1, 0.9);
_drawCanvas.colorTransform(_drawCanvas.rect, _colorT);
//_drawCanvas.fillRect(_drawCanvas.rect, 0x0);
_glow.fillRect(_glow.rect, 0x0);
var _p:Particle;
var _num:uint = _pVector.length;
for (var i:uint = 0; i < _num; i++) {
_p = _pVector[i];
_p.x += _p.vx;
_p.y += _p.vy;
_p.color += -0x01000000;
// _p.color += Math.random() * 0x00ffffff
_drawCanvas.setPixel32(_p.x, _p.y, _p.color);
}
_drawCanvas.unlock();
_glow.draw(_drawCanvas, _glowMtx);
}
}
}
class Particle {
//x軸
public var x:Number;
//y軸
public var y:Number;
//x軸方向の速さ
public var vx:Number;
//y軸方向の速さ
public var vy:Number;
//色
public var color:Number;
public function Particle(x:Number, y:Number, vx:Number, vy:Number, color:Number):void {
this.x = x;
this.y = y;
this.vx = vx;
this.vy = vy;
this.color = color;
}
}
