forked from: 火蜂発狂劣化弾幕(drawCircle版)
rsakane
火蜂発狂劣化弾幕 - 画像の読み込み方法が分からんのでdrawCircle版
http://d.hatena.ne.jp/rsakane/20081105/hibachi
// 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
);
}
}