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

TransitionEffect

package {
	import flash.display.*;
	import flash.events.*;
	import flash.filters.*;
	import flash.geom.*;
	import flash.net.*;
	import flash.text.*;
	import flash.utils.*;
	import jp.progression.core.commands.*;
	import jp.progression.commands.*;
	import caurina.transitions.Equations;

	public class MainDisplay extends Sprite {

		public function MainDisplay() {
                        var loading :TextField = new TextField();
                        loading.text ="loading";
                        loading.width = 400;
                        loading.alpha = 0;

                        var imgurl:URLRequest= ProxyRequest.get( "http://level0.kayac.com/images/doke/oshiruko.png" );
                        var loader :Loader = new Loader();
                        var canvas:Sprite = this;
                        var command:CommandList = new SerialList( null,
                            //ローディング表示
                            new AddChild( this, loading ),
                            new DoTweener( loading, { alpha:1, time:1 } ),
                            
                            // ロード開始
                            new LoadObject( loader, imgurl ),
                            
                            // ローディング非表示
                            new DoTweener( loading , { alpha:0, time:1 } ),
                            new RemoveChild( this, loading ),
                            
                            // ローディング非表示
                            function ():void {
                                var origin:BitmapData = Bitmap( loader.content ).bitmapData as BitmapData;
                                var mapBmp:BitmapData = new FilterMap( origin.width, origin.height );
                                
                                //読み込んだ画像をエフェクトクラスに突っ込んでTweenさせる
			        var effect:Effect = new ThresholdEffect( origin,  mapBmp );
                                var tx:int= ( canvas.stage.stageWidth-origin.width)*0.5;
			        var ty:int= ( canvas.stage.stageHeight-origin.height)*0.5;
			        this.parent.insertCommand(
                                    new Prop( effect, { x:tx, y:ty } ),
                                    new AddChild( canvas , effect ),
                                    new DoTweener( effect, { percent:1, time:2, transition: Equations.easeInCubic } )
                                );
                        }
                    );
                    command.execute();
		}
	}
}

import flash.errors.IllegalOperationError;
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.net.*;
import flash.system.*;

//--------------------------------------
//  エフェクト本体(Templateパターン)
//--------------------------------------
class Effect extends Sprite {
	private var _origin:BitmapData;
	private var _output:BitmapData;
	private var _effect:BitmapData;
	public function Effect( origin:BitmapData, output :BitmapData = null ) {
		_origin = origin;
		_output = output ? output : new BitmapData( _origin.width, _origin.height, true, 0x0 );
		addChild( new Bitmap( _output ) );
	}
	protected var _percent:Number = 0;
	public function get percent():Number { return _percent; }
	public function set percent(value:Number):void {
		_percent = value;
		_updateEffect();
	}
	private function _updateEffect():void{
		_effect = _origin.clone();
		updateEffect(_effect);
		_output.draw( _effect );
	}

        // ここでエフェクト処理を何かする。
	protected function updateEffect( effect:BitmapData ):void{
		new IllegalOperationError("updateEffectはOverrideする必要があります。");
	}
}

//--------------------------------------
//  エフェクト本体
//--------------------------------------
class ThresholdEffect extends Effect  {
	private var _mapBmp:BitmapData;
	private static const START_PARAM:uint = 0x00;
	private static const END_PARAM:uint = 0xFF;
	public function ThresholdEffect( origin:BitmapData, mapBmp:BitmapData, output:BitmapData = null ) {
		super( origin, output  );
		_mapBmp = mapBmp;
	}
        // パーセント値に応じてエフェクトをアップデート
	protected override function updateEffect( effect :BitmapData ):void {
		var threshold:uint = Math.round( Number( END_PARAM - START_PARAM) * _percent );
		effect.threshold( _mapBmp, _mapBmp.rect, new Point(), ">=",threshold, 0x00, 0xFF );
	}
}


//--------------------------------------
//  エフェクト用のフィルタBitmapData
//--------------------------------------
class FilterMap extends BitmapData {
	public function FilterMap( w:int, h:int ) {
		super( w, h, false, 0x0 );
		var map:Shape = new Shape();
		var gMat:Matrix = new Matrix();
		gMat.createGradientBox( w, h, -45 );
		map.graphics.beginGradientFill( GradientType.LINEAR, [ 0x000000, 0xFFFFFF ], [ 1.0, 1.0 ], [ 0, 255 ], gMat );
		map.graphics.drawRect( 0, 0, w, h );
		map.graphics.endFill();
		var rnd:int = Math.round(Math.random() * 65432);
		this.perlinNoise( width/6, height/6, 24, rnd, true, true, 1, true );
		draw( map, null, null, BlendMode.MULTIPLY );
	}
}

//--------------------------------------
//  Proxy経由のURL生成
//--------------------------------------
class ProxyRequest {
    public static const PROXY:String = "http://5ivestar.org/proxy/";
    public static const CROSSDOMAIN:String = "http://5ivestar.org/proxy/crossdomain.xml";
    public var onComplete:Function;
    public static function get( imagePath:String ) :URLRequest{
        Security.loadPolicyFile(CROSSDOMAIN);
        return new URLRequest( PROXY+imagePath );
    }
}

//--------------------------------------
//  ロードコマンド(がなぜかかなったので)
//--------------------------------------
import jp.progression.core.commands.*;

class LoadObject extends Command {
    private var _loader:Loader;
    private var _url:URLRequest;
    public function LoadObject( loader:Loader, url:URLRequest, initObject:Object = null ){
        super( _execute, _interrupt, initObject );
        _loader= loader;
        _url = url;
    }
    private function _execute():void {
        //executeComplete();
        _loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onLoadComplete );
        _loader.load( _url );
    }
    private function onLoadComplete( e:Event ):void {
        executeComplete();
    }
    private function _interrupt():void {
        interruptComplete();
    }
}