swf間の変数渡し

複数のswf間での変数の受け渡しがよくわからなかった件でメモ。
a.swf 、b.swf という2つのswf を用意。
a.swf から b.swf を呼び出すことを想定。
その際、自作クラス Csample を渡します。

*** Csample.as の内容 ***


package {

	public class Csample {
		var a:int;
		function Csample() {
			a = 1;
		}

		public function getA():int{
			return a;
		}

		public function setA(p:int):void{
			a = p;
		}
	}
}

いくつかやり方があるようです。

●その1(シンプルなやり方?)

*** a.swf の内容 ***


var csample:Csample = new Csample(); // 自作のクラス

*** b.swf の内容 ***


// 参照したい場所で
var pobj:Object=this;
trace("rootの変数を参照 ="+pobj.parent.parent.csample.getA());
// といった感じで書くと受け渡された変数にアクセスできるようです。
// この場合は、Csample 内の関数 getA() にアクセス。

●その2(もうちょっとしっかりしたやり方?)

*** a.swf の内容 ***


var csample:Csample = new Csample(); // 自作のクラス
var loader:Loader = new Loader();
var subswf:*;

// b.swf を呼び出すボタンをbtn1として
btn1.addEventListener(MouseEvent.CLICK,onBtn1);

function onBtn1(e:Event):void {
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
	var request:URLRequest = new URLRequest("b.swf");
	loader.load(request);
}

function onComplete (e:Event):void { // 読み込みが完了
	e.target.removeEventListener(Event.COMPLETE, onComplete);
	addChild(loader);
	subswf = loader.content;
	subswf.setParam(csample); // b.swf に関数 setParam() が宣言されている
}

*** b.swf の内容 ***


// 呼び出し元から呼び出される関数を用意
var csmpl:Csample; // 自作のクラス

function setParam(p:Csample):void{
	csmpl = p;
	trace(csmpl.getSample()); // 任意の場所で渡された変数を使用可能
}

コメント