LocalConnectionの複数ウィンドウ対策
先日、メタボールを用いたシューティングゲームのブログパーツを作成しました。下記のゲームです。
その際、シューティングメタボールブログパーツの説明ページが重くなる現象が発生しました。ヘッダーFlashのメタボールと、ゲーム上のメタボールが同時に存在した際、非常に処理が重くなってしまうというものです。そこでLocalConnectionを用いて、ゲームのスタートボタンが押されたら、ヘッダー上のメタボールが消えるように設定しました。しかし想定外にウィンドウを複数開かれると、LocalConnectionの変数名がダブってしまってまともに動かなくなりました。例えば、2つ目以降のウィンドウでは、スタートを押してもヘッダー上のメタボールが消えなくなってしまいました。
これを防いだ方法を今回ご紹介します。まず、ブラウザ上で、1970年からの総ミリ秒数を取得します。
- JSの場合
var mSecond = new Date().getTime();
- PHPの場合
$mSecond = time();
次に、取得されたミリ秒数を、両方のswfのFlashVarsに設定してやります。
<param name="FlashVars" value="mSecond=<?php echo $mSecond; ?>" />
最後に、ヘッダーとゲームのFlash内ASに、FlashVarsから取得された共通の変数を設定します。
//送信側(今回はゲーム側) myLocalConnection = new LocalConnection(); function setLogoVisible(isVisible){ myLocalConnection.send(String(_root.mSecond),"unVisible",{isVisible:isVisible}); }
//受信側(今回はヘッダー側) myLocalConnection = new LocalConnection(); myLocalConnection.connect(String(_root.mSecond)); myLocalConnection.unVisible = function(isVisible){ //(略) };
以上により、LocalConnectionの複数ウィンドウ対策ができました。