ご存知のように Flash 8 の swf (AS1/2 の swf) は Flex 2 アプリ (AS3 の swf) から直接扱うことができません。そのため Loader コンポーネントで Flash 8 の swf を読み込んでから LocalConnection を使う必要があります。
この件に関する簡単なサンプルがテックノートとして公開されましたのでご紹介します。(Using Flash 8 SWFs with Flex 2 Applications) テックノート内のサンプルファイルもこちらからダウンロードできます。(LocalConnection.zip - 210KB)
概要をかいつまんで説明しますと、Flash 側では以下のような記述をします(一部のみ抜粋)。
var lc:LocalConnection = new LocalConnection(); lc.stopPlanet = function() { stop(); } lc.resumePlanet = function() { play(); } lc.allowDomain("*"); lc.connect("swf8connector"); star_mc.onRelease = function() { var sendLC:LocalConnection = new LocalConnection(); sendLC.send( "swf2Flex", "starClick" ); }
LocalConnection オブジェクトを生成してから関数を追加して(必要であれば)allowDomain() を呼び出しています。これで初期設定は完了なので、swf8connector という名前で接続します。これは Flex 側からの接続に使われる名前です。
最後の4行ではイベントハンドラーを設定しています。この中でも LocalConnection オブジェクトを生成していますが、これは Flash 側から送信するためのものです。LocalConnection で双方向の通信はできないのでしたね。
Flex 側では以下のようなコンポーネントを作成します(これも抜粋&一部修正)。
<mx:Script> <![CDATA[ import flash.net.LocalConnection; private var swfState:String = "play"; private var lc:LocalConnection; private var fromSWF:LocalConnection; private function initApp() : void { lc = new LocalConnection(); fromSWF = new LocalConnection(); fromSWF.client = this; fromSWF.connect("swf2Flex"); } private function starClick() : void { if( swfState == "play" ) { stopResumeButton.label = "Resume"; lc.send( "swf8connector", "stopPlanet" ); swfState = "stop"; } else { stopResumeButton.label = "Stop"; lc.send( "swf8connector", "resumePlanet" ); swfState = "play"; } } ]]> </mx:Script>
initApp() 内で送受信用の LocalConnection オブジェクトそれぞれを初期化しています。後はメソッドの定義です。
Flash 側で star_mc がクリックされると、Flex 側の starClick() が呼ばれ、そこから Flash 側の stopPlanet() または resumePlanet() がよばれるというちょっとややこしい動きをします。
毎度、スレ違いな質問で恐縮です。
急にDreamweaberを評価することになったのですが
これには、コードエディタとは別に、文書構造エディタみたいな機能はないんでしょうか?
しいて例を挙げると、PowerPointの目次作成みたいな
超シンプルなインターフェースでしょうか…
管理職クラスのおじさんや新人さんにXHTMLを意識させずに、
文書構造編集・管理とデザイン編集・管理全部作業が一貫してできると教育コスト的にかなり減るんで助かるんですが…
Dreamweaberほどのソフトだから必ずどこかに
あるような気もするんですが…みつからません。
これは、Contributeに含まれるのでしょうか???
話題違い過ぎでした。スルーして下さい。書いてから反省。