forked from: forked from: 台風または銀河
三角関数を使わない円運動を試してるうちにへんなのができました
グレー減衰だとつまんないので微妙に青だけ残してみる
/**
* Copyright keegs ( http://wonderfl.net/user/keegs )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/pnV1
*/
// forked from keegs's forked from: 台風または銀河
// forked from uwi's 台風または銀河
// 三角関数を使わない円運動を試してるうちにへんなのができました
// グレー減衰だとつまんないので微妙に青だけ残してみる
package {
import flash.display.*;
import flash.filters.*;
import flash.geom.*;
import flash.events.Event;
import net.hires.debug.Stats;
[SWF(frameRate="30")]
public class FlashTest extends Sprite {
private const NLIM : uint = 10000;
private const NGEN : uint = 50;
private const W : int = 465;
private const H : int = 465;
private const RLIM2 : Number = W * W + H * H;
private const O : Point = new Point(0, 0);
private var _bullets : Array = new Array(NLIM);
private var _nbullet : uint = 0;
private var _transform : ColorTransform = new ColorTransform(0.5, 0.8, 0.5);
private var _blur : BitmapFilter = new BlurFilter(2, 2, 1);
public function FlashTest() {
var bmd : BitmapData = new BitmapData(W, H, false);
bmd.fillRect(bmd.rect, 0x000000);
var bmp : Bitmap = new Bitmap(bmd);
addChild(bmp);
var t : int = 0;
addEventListener(Event.ENTER_FRAME, function(e : Event) : void {
bmd.lock();
var i : int, dx : Number, dy : Number, bullet : Object;
var rnd:Number = 0;
for(i = _nbullet - 1;i >= 0;i--){
rnd = Math.random();
bullet = _bullets[i];
dx = (bullet.x - bullet.y * bullet.v) * bullet.k + (mouseX - W/2)/100;
dy = (bullet.y + bullet.x * bullet.v) * bullet.k + (mouseY - H/2)/100;
bullet.x = dx; bullet.y = dy;
// 置換による消去
if(bullet.x * bullet.x + bullet.y * bullet.y > RLIM2){
_bullets[i] = _bullets[_nbullet-1];
_nbullet--;
}
bmd.setPixel(bullet.x + W / 2, bullet.y + H / 2, bullet.c);
}
var c : uint = 0xffffff;
// Math.abs((t & 511) - 255) << 16 |
// Math.abs(((2 * t) & 511) - 255) << 8 |
// Math.abs(((3 * t) & 511) - 255) << 0;
t++;
if(t == 512)t = 0;
// 生成
for(i = 0;i < NGEN;i++){
if(_nbullet < NLIM)_bullets[_nbullet++] = {
x : 0,
y : 5,
v : -0.05-Math.random() * 0.1, // ここを0まわりに配置するときれいな弾幕に
k : 1 + Math.random() * 0.05,
c : c
};
}
bmd.applyFilter(bmd, bmd.rect, O, _blur);
bmd.colorTransform(bmd.rect, _transform);
bmd.unlock();
});
addChild(new Stats());
}
}
}