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

メガフレアっぽい弾幕

霊烏路空のメガフレア?を真似て作ってみました。
今ある知識で無理矢理にそれっぽく見えるようにしただけで色々と適当。
というかほとんど前回の使い回し。
クリックで弾が出ます。
Get Adobe Flash player
by shuff 04 Aug 2010
    Embed
/**
 * Copyright shuff ( http://wonderfl.net/user/shuff )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/aByh
 */

/*
    霊烏路空のメガフレア?を真似て作ってみました。
    今ある知識で無理矢理にそれっぽく見えるようにしただけで色々と適当。
    というかほとんど前回の使い回し。
    クリックで弾が出ます。
*/

package {
    import flash.display.BlendMode;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.GlowFilter;
    
    import org.libspark.betweenas3.BetweenAS3;
    import org.libspark.betweenas3.tweens.ITween;
    [SWF(backgroundColor=0x0,height=512,width=512,frameRate = "24")]
    
    
    public class Main extends Sprite
    {
        private var circle:Sprite;
        private var bullets:Array=[];    
        
        public function Main(){
        stage.addEventListener(MouseEvent.MOUSE_DOWN,setCircle);
        }
    
    
    //クリックされたときに丸を表示する
    private function setCircle(e:MouseEvent):void{
        addEventListener(Event.ENTER_FRAME,onEnterframe);

        //メインの大きい弾を作る
        var sp:Sprite = new Sprite;
        sp.graphics.beginFill(0xffffff,0.7);
        //弾の出る位置の設定
        var sp_x:Number = Math.random()*(stage.stageWidth-100)+50;
        var sp_y:Number = Math.random()*80+20; 
        sp.graphics.drawCircle(sp_x,sp_y,130);
        sp.graphics.endFill();
        sp.filters = [new GlowFilter(0xff0000,0.8,140,140,4)];
        sp.blendMode = BlendMode.ADD;
        addChild(sp);
            
        //拡散する小さい弾を作る
        for(var angle:int = 0 ; angle < 360 ; angle += 20){
            var bullet:Bullet = new Bullet(0xffffff,10,5,sp_x,sp_y,Math.cos(angle*Math.PI/180)*5.5,Math.sin(angle*Math.PI/180)*5.5);
            bullet.blendMode = BlendMode.ADD;
            bullets.push(bullet);
            addChild(bullet);
        }
        
        //画面下へ流れていく動き
        var move:ITween = BetweenAS3.tween(sp,{x:sp_x,y:650,scaleX:0.1,scaleY:0.1},null,3.0);    
        move.play();
        
    }

    //弾が画面内にあるかのチェックをする
    private function onEnterframe(e:Event):void{
            for(var i:int = 0;i<bullets.length;i++){
            bullets[i].move();
            if(bullets[i].x<-50||stage.stageWidth+50<bullets[i].x||
                bullets[i].y<-50||stage.stageHeight+50<bullets[i].y){
                    removeChild(bullets[i]);
                    bullets.splice(i--,1);
                }
        }
    }
    }
}


//拡散する弾を作る
import flash.display.Sprite;
import flash.filters.GlowFilter;    
class Bullet extends Sprite
{
    public var vx:Number;
    public var vy:Number;
        
    public function Bullet(color:uint,r:Number,p:int,x:Number,y:Number,vx:Number,vy:Number)
    {
        graphics.beginFill(color);
        graphics.lineStyle(1,0x0000ff);
        graphics.drawCircle(0,0,r);
        graphics.endFill();
        filters = [new GlowFilter(0x0000ff,0.7,15,15,2)];
        
        this.x = x;
        this.y = y;
        this.vx = vx;
        this.vy = vy;
    }
    
    public function move():void{
        x+=vx;
        y+=vy;
    }
}