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: doraを崩壊させてみた

@author minon@minomix.net
// forked from minon's doraを崩壊させてみた
/**
 * @author minon@minomix.net
 */
package  {
	import flash.display.*;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Rectangle;
	import flash.text.*;
	
	[SWF(backgroundColor="#000000",width="465",height="465",frameRate="60")]
	
	public class BreakDora extends Sprite {
		
		private var _canvas:BitmapData;
		private var _source:BitmapData;
		private var _t:TextField;
        private var _dora:Dora;

		private var _particles:Array = new Array();
		
		private var _line:int = 0;
		private var _n:int = 1;
        private var reverse:Boolean = false;
		
		public function BreakDora() {
			
			_dora = new Dora(1);
                        
			_source = new BitmapData( _dora.width, _dora.height, true, 0x00FF0000 );
			_source.draw( _dora );
			this.addChild( new Bitmap( _source ) );
			
			_canvas = new BitmapData( 465, 465, true, 0x00FF0000 );
			this.addChild( new Bitmap( _canvas ) );
			
            _t = new TextField();
            _t.defaultTextFormat = new TextFormat( "_sans", 12, 0xFF0000 );
            _t.text = "clickで崩壊";
            _t.y = 200;
            this.addChild( _t );

			this.stage.addEventListener( MouseEvent.CLICK, clickHandler );
			
		}
		
		
		private function clickHandler(e:MouseEvent):void {
			_line = _source.height;
			this.addEventListener( Event.ENTER_FRAME, breakLine );
			this.addEventListener( Event.ENTER_FRAME, update );
		}
		
		
		private function breakLine(e:Event):void {
			
			var l:int;
			for (var i:int = 0; i <= _n ; i++) {
				for (var j:int = 0; j < _source.width ; j++) {
					l = _line - i;
					if ( _source.getPixel32( j, l ) != 0 ) {
						emit( j, l, 1.05, _source.getPixel32( j, l ) );
						_source.setPixel32( j, l, 0 );
					}
				}
			}
			
			_line -= _n;
			if ( _line < 0 ) this.removeEventListener( Event.ENTER_FRAME, breakLine );
			
		}
		
		public function emit(ex:Number, ey:Number, s:Number = 1, c:int = 0xffffff ):void {
			var p:Particle = new Particle();
			p.ix = ex;
			p.iy = ey;
			p.x = ex;
			p.y = ey;
			p.xx = Math.random() * 2 + 1;
			p.yy = Math.random() / 2;
			p.s = s;
			p.c = c;
			_particles.push(p);
		}
		
		public function update(e:Event):void {
			
			_canvas.lock();
			_canvas.fillRect(this._canvas.rect, 0x00FF0000);
			var n:int = _particles.length;
			var count:int = 0
			while (n--) {
				var p:Particle = this._particles[n];
				
				if (!reverse &&
                    p.y < stage.stageHeight &&
                    p.l > 0 &&
                    p.x > 0 &&
                    p.x < stage.stageWidth 
                ) {
					count++
                    p.yy += 0.01 * p.s;
                    p.xx *= 0.999;
                    p.x += p.xx;
                    p.y += p.yy;
                    p.l--;
                    _canvas.fillRect( new Rectangle( p.x, p.y, 1, 1 ), p.c );
				}else if (reverse){
                    /*
                    p.yy -= 0.01 * p.s;
                    p.xx /= 0.999;
                    p.x -= p.xx;
                    p.y -= p.yy;
                    */
                    p.x += (p.ix - p.x) * .02;
                    p.y += (p.iy - p.y) * .02;
                    _canvas.fillRect( new Rectangle( p.x, p.y, 1, 1 ), p.c );
                }
			}
			if (count == 0) reverse = true;
			_canvas.unlock();
			
		}
	}
}

class Particle {
	
	public var ix:Number;
	public var iy:Number;
	public var x:Number;
	public var y:Number;
	public var xx:Number;
	public var yy:Number;
	public var s:Number;
	public var c:int;
	public var l:int
	
	public function Particle() {
		this.ix = 0;
		this.iy = 0;
		this.x = 0;
		this.y = 0;
		this.xx = 0;
		this.yy = 0;
		this.s = 1;
		this.c = 0x00FF00;
		this.l = 50 + Math.random() * 50;
	}
	
}

import flash.display.*;
import flash.geom.*;

class Dora extends Sprite{
    public function Dora(num:int) { 
        var sp:Sprite = new Sprite(); 
        addChild(sp);
        
        var head:Sprite = new Sprite();
        var w:Number = 94;
        var h:Number = 82;
        
        //頭を描く
        head.graphics.beginFill(0xffffff * Math.random()); 
        head.graphics.moveTo(-w/2, 0);
        head.graphics.curveTo(-w/2+2, -h/2+1, 0, -h/2);
        head.graphics.curveTo(w/2-2, -h/2+1, w/2, 0);
        head.graphics.curveTo(w/2-1, h/2-1, 0, h/2);
        head.graphics.curveTo(-w/2+1, h/2-1, -w/2, 0);  
        head.graphics.endFill();
        sp.addChild(head);
        
        //顔の輪郭を描く
        var face:Sprite = new Sprite();
        face.y = 7;
        w = 86;
        h = 67;
        face.graphics.beginFill(0x000000); 
        face.graphics.moveTo(-w/2, 0);
        face.graphics.curveTo(-w/2+2, -h/2+1, 0, -h/2);
        face.graphics.curveTo(w/2-2, -h/2+1, w/2, 0);
        face.graphics.curveTo(w/2-1, h/2-1, 0, h/2);
        face.graphics.curveTo( -w/2+1, h/2 - 1, -w / 2, 0);
        sp.addChild(face);
        
        //目を描く
        var lefteye:Sprite = new Sprite();
        lefteye.x = -17.5;
        lefteye.y = -35;
        drawOval(lefteye, 17, 19);
        sp.addChild(lefteye);
        
        var eye1:Sprite = new Sprite();
        eye1.graphics.beginFill(0x000000);
        eye1.graphics.drawEllipse(0, 0, 8, 2);
        eye1.x = -14;
        eye1.y = -27;
        sp.addChild(eye1);
        
        var righteye:Sprite = new Sprite();
        righteye.x = 0.5;
        righteye.y = -35;
        drawOval(righteye, 17, 19);
        sp.addChild(righteye);
        
        var eye2:Sprite = new Sprite();
        eye2.graphics.beginFill(0x000000);
        eye2.graphics.drawEllipse(0, 0, 8, 2);
        eye2.x = 6;
        eye2.y = -27;
        sp.addChild(eye2);
        
        //鼻を描く
        var nose:Sprite = new Sprite();
        nose.x = -5.5;
        nose.y = -20;
        drawOval(nose, 11, 9);
        sp.addChild(nose);
        
        //鼻下を描く
        var noseline:Sprite = new Sprite();
        noseline.graphics.lineStyle(1, 0xFFFFFF);
        noseline.graphics.moveTo( -0.5, -18);
        noseline.graphics.lineTo( -0.5, 24);
        sp.addChild(noseline);
        
        //口を描く
        var mouse:Sprite = new Sprite();
        mouse.graphics.lineStyle(1, 0xFFFFFF);
        mouse.graphics.moveTo( -31, 6);
        mouse.graphics.curveTo( -24, 24, 0, 24);
        mouse.graphics.curveTo(24, 24, 31, 6);
        sp.addChild(mouse);
        
        //ヒゲを描く
        var higeR:Sprite = new Sprite();
        higeR.graphics.lineStyle(1, 0xFFFFFF);
        higeR.graphics.moveTo( -16, -13);
        higeR.graphics.lineTo( -35, -16);
        higeR.graphics.moveTo( -17, -9);
        higeR.graphics.lineTo( -36, -9);
        higeR.graphics.moveTo( -16, -5);
        higeR.graphics.lineTo( -35, -2);
        sp.addChild(higeR);
        
        var higeL:Sprite = new Sprite();
        higeL.graphics.lineStyle(1, 0xFFFFFF);
        higeL.graphics.moveTo( 16, -13);
        higeL.graphics.lineTo( 35, -16);
        higeL.graphics.moveTo( 17, -9);
        higeL.graphics.lineTo( 36, -9);
        higeL.graphics.moveTo( 16, -5);
        higeL.graphics.lineTo( 35, -2);
        sp.addChild(higeL);
        
        sp.x += sp.width / 2;
        sp.y += sp.height / 2;
    }
    
    private function drawOval(s:Sprite, w:Number, h:Number):void {
        s.graphics.beginFill(0xFFFFFF, 100); 
        s.graphics.moveTo(0, h/2);
        s.graphics.curveTo(0.5, 0.5, w/2, 0);
        s.graphics.curveTo(w-0.5, 0.5, w, h/2);
        s.graphics.curveTo(w-0.5, h-0.5, w/2, h);
        s.graphics.curveTo(0.5, h-0.5, 0, h/2); 
        s.graphics.endFill();
    }
    
}