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

外部SWFからクラス取得のテスト

外部SWFファイルのロード時にApplicationDomainを指定するとクラスを取得できるみたいなので、その確認テスト。

今回取得したBallクラス
・new Ball(color:uint = 0x000000, alpha:Number = 1, radius:Number = 20)
・move(_x:Number = 0, _y:Number = 0)
 x座標=_x, y座標=_yに移動する
・translate(_x:Number = 0, _y:Number = 0)
 現在位置からx座標+_x, y座標+_y移動する
・spring(_x:Number = 0, _y:Number = 0)
 加速度っぽく動く

SWF:http://wonderfl.net/code/7f44a22e80d947a0aa79e1665165b57f37bfd521
Get Adobe Flash player
by geko 11 Nov 2010
    Embed
/**
 * Copyright geko ( http://wonderfl.net/user/geko )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/qRLp
 */

package {
    import flash.display.Sprite;
    import flash.display.Loader;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.net.URLRequest;
    import flash.system.ApplicationDomain;
    import flash.system.LoaderContext;
    import com.actionscriptbible.Example;
    import net.wonderfl.utils.WonderflSWFUrl;
    
    [SWF(frameRate="120")]
    public class FlashTest extends Example {
        public const LibURL:String = WonderflSWFUrl.getURLFromPageURL("http://wonderfl.net/code/7f44a22e80d947a0aa79e1665165b57f37bfd521");
        public const ClassName:String = "Ball";
        public var Lib:Class;
        public var child:*;
        
        public function FlashTest() {
            trace("ステージをクリックしてください");
            //クリックしたら外部SWFを取得する
            stage.addEventListener(MouseEvent.CLICK, function click(event:MouseEvent):void{
                trace("click")
                stage.removeEventListener(MouseEvent.CLICK, click);
                stage.addEventListener(Event.ENTER_FRAME, enterFrame);
                imports();
            });

        }
        
        //外部SWFからクラスを取得する
        public function imports():void{
            //アプリケーションドメインの設定
            var appDomain:ApplicationDomain = ApplicationDomain.currentDomain;
            var loader:Loader = new Loader();
            //読み込み時にアプリケーションドメインを指定
            loader.load(new URLRequest(LibURL), new LoaderContext(true, appDomain));
            trace("読み込み中");
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function complete(event:Event):void{
                trace("complete");
                event.target.removeEventListener(Event.COMPLETE, complete);
                //アプリケーションドメインに指定したクラスがあるか
                if(appDomain.hasDefinition(ClassName)){
                    //取得したクラスをClass型変数に代入
                    Lib = appDomain.getDefinition(ClassName) as Class;
                    //取得したクラスで変数作成
                    child = addChild(new Lib(0xFF3344));
                    trace("外部SWFファイルから"+ClassName+"クラスをインポートしました");
                }
                else{
                    trace("外部SWFファイルには"+ClassName+"クラスは存在しません");
                }
            });
        }
        
        public function enterFrame(event:Event):void{
            if(!child) return;
            //取得したクラスのメソッドを呼ぶ
            child.spring((mouseX-child.x)/60, (mouseY-child.y)/60);
        }
    }
}