- ベストアンサー
2つのブラウザ間で連動したFlashサイトの作り方
- 2つのブラウザ間で連動したFlashサイトを作るための方法を教えてください。
- Flash CS3とWindowsXP SP3を使用して、2つのブラウザが小窓で立ち上がり、それぞれの小窓にFlashが表示されるようなサイトを作りたいです。
- 特定のボタンを押すと、もう一方のFlashが反応し、指定のフレームが再生されるような仕組みを作りたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
※字数制限に引っかかります(以前はこんなことなかったのに...) というわけで回答を #1~#4 に分けます。 では #4 ◎BBB.swf(BBB.fla) -------------------------------------------------------------- // このタイムラインの再生を停止 stop(); // もし接続フラグが true でなければ以下を実行 // (ループ再生による重複(多重)実行を防ぐための if文) if (! connectFlag) { // // 接続フラグを true にする var connectFlag:Boolean=true; // // 受信LocalConnection「jyusinLC」を作成 var jyusinLC:LocalConnection = new LocalConnection(); // // コールバック関数があるオブジェクトをthisに指定 jyusinLC.client=this; // //関数goPlayを定義(引数:整数値) function goPlay(frame_num:int):void { // このタイムラインを引数フレームから再生開始 gotoAndPlay(frame_num); } // // 接続名「LCB」で受信側オブジェクトを準備 jyusinLC.connect("LCB"); // // if 終わり } // 送信用LocalConnection「sousinLC」を作成 var sousinLC:LocalConnection = new LocalConnection(); // // ボタン「btn」に対してクリック時に // 関数btnClickを実行するイベントリスナーを登録 btn.addEventListener(MouseEvent.CLICK,btnClick); // // 関数btnClickを定義 function btnClick(evt:MouseEvent):void { // 接続名「LCA」を準備したSWFにある関数goPlayを引数5で実行 sousinLC.send("LCA", "goPlay", 5); } -------------------------------------------------------------- ※ ↑Flash Player 9 以上で動作可能 ※字数制限に引っかかります(以前はこんなことなかったのに...) というわけで回答を #1~#4 に分けます。 では #4 以上のようにして作成した「AAA.swf」と「BBB.swf」を一緒に開いて, ボタンをクリックすると, 「AAA.swf」の命令を「BBB.swf」が聞き, 「BBB.swf」の命令を「AAA.swf」が聞くのが確認できると思います。 HTMLに貼った状態で表示させても貼らない状態で起動させても結果は同じです。 また HTMLに貼った場合, 2つのHTMLに2つのSWFを別々に貼っても,1つのHTMLに2つのSWFを一緒に貼っても結果は同じです。 「Window名」や「ファイル名」などの指示も要りません。 「接続名」だけで対話しますから楽です。 また, 他の言語や外部ファイルなどを仲介することなく, SWFどうしが直接やりとりすることができるのでその点も非常に楽です。
その他の回答 (3)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
※字数制限に引っかかります(以前はこんなことなかったのに...) というわけで回答を #1~#4 に分けます。 では #3 ActionScript3.0 で各ファイルのメインのタイムライン(_root)のフレームに書くスクリプト例です。 ◎AAA.swf(AAA.fla) -------------------------------------------------------------- // このタイムラインの再生を停止 stop(); // もし接続フラグが true でなければ以下を実行 // (ループ再生による重複(多重)実行を防ぐための if文) if (! connectFlag) { // // 接続フラグを true にする var connectFlag:Boolean=true; // // 受信LocalConnection「jyusinLC」を作成 var jyusinLC:LocalConnection = new LocalConnection(); // // コールバック関数があるオブジェクトをthisに指定 jyusinLC.client=this; // //関数goPlayを定義(引数:整数値) function goPlay(frame_num:int):void { // このタイムラインを引数フレームから再生開始 gotoAndPlay(frame_num); } // // 接続名「LCA」で受信側オブジェクトを準備 jyusinLC.connect("LCA"); // // if 終わり } // 送信用LocalConnection「sousinLC」を作成 var sousinLC:LocalConnection = new LocalConnection(); // // ボタン「btn」に対してクリック時に // 関数btnClickを実行するイベントリスナーを登録 btn.addEventListener(MouseEvent.CLICK,btnClick); // // 関数btnClickを定義 function btnClick(evt:MouseEvent):void { // 接続名「LCB」を準備したSWFにある関数goPlayを引数2で実行 sousinLC.send("LCB", "goPlay", 2); } --------------------------------------------------------------
- BlurFiltan
- ベストアンサー率91% (1611/1754)
※字数制限に引っかかります(以前はこんなことなかったのに...) というわけで回答を #1~#4 に分けます。 では #2 #1のようなものを作るとした場合, ActionScript2.0 で各ファイルのメインのタイムライン(_root)のフレームに書くスクリプト例です。 ◎AAA.swf(AAA.fla) -------------------------------------------------------------- // このタイムラインの再生を停止 stop(); // 受信LocalConnection「jyusinLC」を作成 var jyusinLC:LocalConnection = new LocalConnection(); // // 「jyusinLC」に関数goPlayを定義(引数:数値) jyusinLC.goPlay = function(frame_num:Number):Void { // このタイムラインを引数フレームから再生開始 gotoAndPlay(frame_num); }; // // 接続名「LCA」で受信側オブジェクトを準備 jyusinLC.connect("LCA"); // 送信用LocalConnection「sousinLC」を作成 var sousinLC:LocalConnection = new LocalConnection(); // // ボタン「btn」クリック時の動作を定義 btn.onRelease = function():Void { // 接続名「LCB」を準備したSWFにある関数goPlayを引数5で実行 sousinLC.send("LCB", "goPlay", 5); }; -------------------------------------------------------------- ◎BBB.swf(BBB.fla) -------------------------------------------------------------- // このタイムラインの再生を停止 stop(); // 受信LocalConnection「jyusinLC」を作成 var jyusinLC:LocalConnection = new LocalConnection(); // // 「jyusinLC」に関数goPlayを定義(引数:数値) jyusinLC.goPlay = function(frame_num:Number):Void { // このタイムラインを引数フレームから再生開始 gotoAndPlay(frame_num); }; // // 接続名「LCB」で受信側オブジェクトを準備 jyusinLC.connect("LCB"); // 送信用LocalConnection「sousinLC」を作成 var sousinLC:LocalConnection = new LocalConnection(); // // ボタン「btn」クリック時の動作を定義 btn.onRelease = function():Void { // 接続名「LCA」を準備したSWFにある関数goPlayを引数2で実行 sousinLC.send("LCA", "goPlay", 2); }; -------------------------------------------------------------- ※ ↑Flash Player 6 以上で動作可能 ※ ↑一応 ActionScript2.0 としていますが, :Void や :Number の型指定を削除すれば 即 ActionScript 1.0 になります。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
※字数制限に引っかかります(以前はこんなことなかったのに...) というわけで回答を #1~#4 に分けます。 では #1 2つのSWFファイルを2つのHTMLに貼り付けて, その2つのHTMLをエンターページ(普通のHTML)から JavaScript の window.open で同時に別窓で開くところはよろしいですよね? その先の(その前の) Flash 作成部分の説明をします。 とは言っても, Flash CS3 は,ActionScript1.0~3.0 まで使えますから, 「どんなAS?」と問われましても, どのバージョンのコードを知りたいのかわかりません...。 とりあえず,ActionScript1.0~3.0のどれであっても 「AAA.swf」と「BBB.swf」の2つのSWFを作るものとします。 「AAA.swf」も「BBB.swf」もメインのタイムラインが複数フレームあって, 両方とも フレーム1 で stop(); させているものとします。 また, 両方ともその フレーム1 のステージ上にインスタンス名「btn」というボタンがあって, 「AAA.swf」にあるボタン「btn」クリックで「BBB.swf」を フレーム5 から再生させ, 「BBB.swf」にあるボタン「btn」クリックで「AAA.swf」を フレーム2 から再生させるものを作成するとします。 【図】↓を参考に。 ActionScript1.0~3.0のどれであっても LocalConnectionクラスを使用すれば, 複雑なことをしなくて良いと思います。
お礼
遅くなってしまってすみません! 今から熟読して、試していきたいと思います! 非常に丁寧な解説、ありがとうございます!!!
お礼
無事に理想のサイトを作ることができました! 親切・かつ丁寧にご解説頂き、本当に感謝しております。 ありがとうございました!