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

台風または銀河

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

// 三角関数を使わない円運動を試してるうちにへんなのができました
// グレー減衰だとつまんないので微妙に青だけ残してみる
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.985, 0.985, 0.99);
        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;
                for(i = _nbullet - 1;i >= 0;i--){
                    bullet = _bullets[i];
                    dx = (bullet.x - bullet.y * bullet.v) * bullet.k;
                    dy = (bullet.y + bullet.x * bullet.v) * bullet.k;
                    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());
        }
    }
}