• ホーム
  • メモ
  • as3
  • AS3 読み込んだ子swfにアクセス 読み込んだ子swfから親swfにアクセス

[PR] WEB制作会社PSYCOMMU

as3

AS3 読み込んだ子swfにアクセス 読み込んだ子swfから親swfにアクセス

なにかとswfは外部化する事が多いのでこのテクニックがないとどうにもならないのでメモ。

子swfにアクセスするときのポイントは一つ、
読み込まれた子swfのrootがLoaderクラスのcontentプロパティに格納されるということ。
これさえ肝に銘じていれば大丈夫。

子swfにアクセスから親swfにアクセスする時のポイントも一つ。 parentで階層を上りrootを指定するけれど最初のparentはLoaderクラスになるのでroot(子swfのroot).parent.parentという様に二つ階層を上れば大丈夫。

【asソース(parent.swf)】

package {
	
	import flash.display.Sprite;
	import flash.events.*;
	import flash.text.TextField;
	
	import flash.net.URLRequest;   
	import flash.display.Loader;   
	import flash.display.LoaderInfo; 
	
	public class Sample20091022_Parent extends Sprite {
	
		private var _loader:Loader;
		private var _childRoot:Object; 
		
		private var _parentTxt:TextField;
		
		public function Sample20091022_Parent():void {
			
			init();
			
		}
		
		private function init():void {
			
			var _url:String = "./child.swf";
			var _urlReq:URLRequest = new URLRequest(_url);
			
			_loader = new Loader();   
            addChild(_loader);   
            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedHandler);   
            _loader.load(_urlReq);
			
			_parentTxt = new TextField;
			_parentTxt.width = 180;
			_parentTxt.x = 20;
			_parentTxt.y = 130;
			addChild(_parentTxt);
			_parentTxt.text = "アクセスできるか?";
			
		}
		
		private function onLoadedHandler(e:Event):void {   
			
			
			/* 読み込まれたswfのrootがLoaderクラスのcontentプロパティに格納されます。*/
			_childRoot= _loader.content;
			_childRoot.childAction();
			
			/*
			 * 一行で書く場合
			 * _loader.content["childAction"]();
			 */
        } 
		public function parentAction():void {
			
			_parentTxt.text = "子SWFから親SWFにアクセス!!";
			
		}
	}
}

【asソース(child.swf)】

package {
	import flash.display.Sprite;
	import flash.text.TextField;
	
	public class Sample20091022_Child extends Sprite {
		
		private var _childTxt:TextField;
		private var _parentRoot:Object;
		
		public function Sample20091022_Child():void {
			init();
		}
		
		public function init():void {
			
			_childTxt = new TextField;
			_childTxt.width = 180;
			_childTxt.x = 20;
			_childTxt.y = 50;
			addChild(_childTxt);
			_childTxt.text = "アクセスできるか?";
			
		}
		
		public function childAction():void {
			_childTxt.text = "親SWFから子SWFにアクセス!!";

			/* parentだけならLoaderになりますのでもう一つ上の階層を指定 */
			_parentRoot= root.parent.parent;
			_parentRoot.parentAction()

		}
	}
}

AS3 読み込んだ子swfにアクセス 読み込んだ子swfから親swfにアクセスに対してコメントをする

Copyright 2009 PANDAMA. All rights reserved.
PANDAMA.com 掲載の記事・写真・図表など無断転載を禁止します。著作権はPANDAMA.comに属します。