ActionScript 3.0とActionScript 2.0の混在コンテンツの開発 その1からの続きです。
とりあえずActionScript3のswfにActionScript2のswfがloadmovie出来ることが解りました。
import flash.display.Loader; import flash.display.MovieClip; import flash.net.LocalConnection; import flash.net.URLRequest; import flash.events.StatusEvent; import flash.events.Event;
public class Root extends MovieClip { private var loaders:Loader; private var localconection:LocalConnection;
public function Root():void{ init(); }
private function init():void{ var urlRequest:URLRequest = new URLRequest("as2.swf") loaders = new Loader(); loaders.contentLoaderInfo.addEventListener(Event.COMPLETE,complete) loaders.load(urlRequest) }
たとえばこんな感じで呼んであげれば大丈夫です。
そう、ここまでは簡単なのですが、どうやってActionScript3からActionScript2に話しかければよいでしょうか?
変数的なものはまったくの別世界が広がっているので、お互いにさっぱり参照できません。
その方法とは
ローカルコネクションです!
private function complete(e:Event):void { addChild(loaders) loaders.name = "AS3LOADER" localconection = new LocalConnection(); localconection.connect("as3") localconection.send("ds", "ue", "これはAS3から引数で渡した文字列") }
こんな感じで受け渡しが可能です。
swfが同じブラウザ内に複数ある場合でも、自分の上?(中?)に積み上げられている場合でも関係なくやりとりできるのです。
渡せる長さは、たぶん40kバイトぐらいまでだそうです <又聞きなのでなんとも、、
(加茂君ありがとう)