In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: 台風または銀河

三角関数を使わない円運動を試してるうちにへんなのができました
グレー減衰だとつまんないので微妙に青だけ残してみる
Get Adobe Flash player
by keegs 07 Jul 2009
/**
 * Copyright keegs ( http://wonderfl.net/user/keegs )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/6j7b
 */

// 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());
        }
    }
}