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: 火蜂発狂劣化弾幕(drawCircle版)

rsakane
火蜂発狂劣化弾幕 - 画像の読み込み方法が分からんのでdrawCircle版
http://d.hatena.ne.jp/rsakane/20081105/hibachi
Get Adobe Flash player
by h_sakurai 19 Dec 2008
// forked from rsakane's 火蜂発狂劣化弾幕(drawCircle版)
// write as3 code here..
/**
    rsakane
    火蜂発狂劣化弾幕 - 画像の読み込み方法が分からんのでdrawCircle版
    http://d.hatena.ne.jp/rsakane/20081105/hibachi
*/

package {
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
	
    [SWF(backgroundColor="0x333333", frameRate="30")]
    public class Hibachi extends Sprite {
        private var bullets:Array = new Array();
        private var BulletMax:int = 350;
        private var frameCount:int;
        private var ex:Number;// 敵のx座標
        private var ey:Number;// 敵のy座標

        public function Hibachi() {
            // フレームカウントを0に
            frameCount = 0;
            this.rotationX = -30;
            // 敵の中心を画面中央のやや上よりに
            ex = stage.stageWidth / 2;
    	    ey = stage.stageHeight / 3;

            // 弾を350発作成して、stageに追加して、配列に加える。
       	    for (var i:uint = 0; i < BulletMax; i++) {
                var bullet:Bullet= new Bullet();
                addChild(bullet);
                bullets.push(bullet);
            }
            // フレームごとのイベントを登録する。
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }

        // フレームごとのイベント
        private function onEnterFrame(event:Event):void {
            var i:int;
            var bullet:Bullet;
            // 3回に一回
            if (frameCount++ % 3 == 0) {
                // 適当な角度
                var _degree:Number = Math.random() * 360;
                i = 0;
                // 適当な角度から、240度まで、10度ずつ
                for (var degree:Number = _degree;
                    degree <= _degree + 240; degree += 10) {

                    // ボールの配列数分ループ
                    for (; i < bullets.length; i++) {
                        // ボールが存在している。
                        bullet = bullets[i];
                        if (bullet.exist)
                            continue;

                        // ボールを存在させて、敵の位置に
                        bullet.exist = true;
                        bullet.x = ex;
                        bullet.y = ey;
                        // 角度とラジアン
                        bullet.radian = Math.PI / 180 * degree;
                        break;
                    }
                    // 存在していないボールがないときは抜ける
                    if (i == bullets.length) break;
                }
            }
            
            // 存在しているボールを動かす
            for (i = 0; i < bullets.length; i++) {
                bullet = bullets[i];
                if (bullet.exist) {
                    bullet.move();
                    // レンジから外れていたら消す
                    if (!bullet.range())
                        bullet.exist = false;
                }
            }
            // 敵の位置を適当に変える
            ex += Math.random() * 20 - 10;
            ey += Math.random() * 20 - 10;
            
            // 敵は画面からはみ出ない
            if (ex < 0) ex = 0;
            if (stage.stageWidth < ex)
                ex = stage.stageWidth;
            if (ey < 0) ey = 0;
            if (stage.stageHeight / 2 < ey)
                ey = stage.stageHeight / 2;
        }
    }
}

import flash.display.Sprite;

class Bullet extends Sprite {
    public var exist:Boolean;
    public var radian:Number;
    public var speed:Number = 6.7;
    
    public function Bullet() {
        this.exist = false;// 存在フラグ
        this.x = -20;
        // 弾を描画
        graphics.beginFill(0xEC2A74);
        graphics.drawCircle(0, 0, 5);
        graphics.endFill();
    }

    public function move():void {
        // ラジアンのcosを取ってスピードかけた分だけ移動
        this.x += Math.cos(this.radian) * speed;
        this.y += Math.sin(this.radian) * speed;
    }

    // 画面内にあるかチェック
    public function range():Boolean {
        return (
            -20 <= this.x && this.x <= stage.stageWidth  + 20
        &&  -20 <= this.y && this.y <= stage.stageHeight + 20
        );
    }
}