スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--.--.-- | | スポンサー広告

2つのフラッシュを連携させる

LocalConnectionを使って2つのフラッシュが連携するようにしてみました。




↑のボタンを押すと新しいウィンドウが開いて、フラッシュが表示されマス。すでにウィンドウが開いている場合はそのウィンドウで表示されマス。

どんなカンジで連携してるかというと、
1.ボタンを押すと、どのボタンが押されたかを示す文字列をパラメータとしてメニュー側から表示側へ送信します。
2.表示側は、受け取ったパラメータに応じた表示を行いマス。
3.1.で送信に失敗した場合は表示ウィンドウを開きマス。
4.表示側は再生開始時にメニュー側に準備ができたことを通知します。
5.メニュー側は、表示側の準備が完了したことを受信したときに再送信すべきパラメータがあったら送信します。
なカンジです。

それぞれでのクライアント(送信側)サーバー(受信側)がどうなってるかで書くと
1.メニュー側がクライアントとして動作
2.表示側がサーバーとして動作
4.表示側がクライアントとして動作
5.メニュー側がサーバーとして動作
というカンジで、1.2.と4.5.はそれぞれベツのローカルコネクション名で通信しています。

メニュー側のスクリプトは、

// 最新送信内容
var latestParam:String = null;
// 受信コネクション
var receiver:LocalConnection = new LocalConnection();
receiver.ready = function(param:String) {
// latestParamに値がセットされていたら再送する
if (latestParam != null) {
connect(latestParam);
latestParam = null;
}
}
receiver.connect("lc_menu");

// 送信コネクション
var sender:LocalConnection = new LocalConnection();
sender.onStatus = function(info:Object) {
switch (info.level) {
case 'status':
// 成功したので、パラメータをとっておく必要はない
latestParam = null;
break;
case 'error':
// ウィンドウを開く
_root.getURL("http://blog-imgs-11.fc2.com/1/0/0/100th/display.html",
"_blank");
break;
}
}

// Noneボタン
none_btn.onRelease = function() {
connect("none");
}
// Regularボタン
regular_btn.onRelease = function() {
connect("regular");
}
// Strongボタン
strong_btn.onRelease = function() {
connect("strong");
}
// Elasticボタン
elastic_btn.onRelease = function() {
connect("elastic");
}
// Bounceボタン
bounce_btn.onRelease = function() {
connect("bounce");
}
// Backボタン
back_btn.onRelease = function() {
connect("back");
}

// paramを送信します。
function connect(param:String) {
latestParam = param;
sender.send("lc_display", "disp", param);
}
といったカンジで、表示側のスクリプトは、
import mx.transitions.Tween;

// パラメータ
var paramMap = {none:mx.transitions.easing.None.easeOut,
regular:mx.transitions.easing.Regular.easeOut,
strong:mx.transitions.easing.Strong.easeOut,
elastic:mx.transitions.easing.Elastic.easeOut,
bounce:mx.transitions.easing.Bounce.easeOut,
back:mx.transitions.easing.Back.easeOut};

// テンプレートムービークリップを非表示
jien_mc._visible = false;

// 受信処理
var receiver:LocalConnection = new LocalConnection();
receiver.disp = function(param:String) {
var mc:MovieClip = createMovieClip();
var tween:Tween = new Tween(mc,
"_x",
paramMap[param],
50,
400,
2,
true);
tween.onMotionFinished = function() {
mc.removeMovieClip();
}
}
receiver.connect("lc_display");

// 新しいムービークリップを作成し、戻します。
function createMovieClip():MovieClip {
var depth:Number = getNextHighestDepth();
var mc:MovieClip = jien_mc.duplicateMovieClip("jien_" + depth,
depth);
return mc;
}

// 受信が可能であることを送信する
var sender:LocalConnection = new LocalConnection();
sender.send("lc_menu", "ready", "test");
という風になっています。
jien_mcというのは表示の元ネタになるムービークリップで、コレをduplicateMovieClipしたものをそれぞれのアクションで使ってマス。
paramMapは、パラメータ文字列とTweenに渡すメソッドのマップです。

1.2.に対応するのが、lc_displayという名前のコネクションで表示側が待ちうけてます。
4.5.に対応するのが、lc_menuという名前のコネクションでメニュー側が待ちうけデス。
スポンサーサイト

テーマ:Flash - ジャンル:コンピュータ

2007.03.15 | | Comments(0) | Trackback(0) | Flash/ActionScript

コメント

コメントの投稿


秘密にする

«  | HOME |  »

プロフィール

HundredthMonkey

Author:HundredthMonkey
プログラマ。

ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文:

ブログ内検索


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。