1

マルチプレイヤー フラッシュ ゲーム (AS3) を使用していますが、マルチボックス化を防止したいと考えています。たとえば、ユーザーが 1 台のコンピューターでゲームの 2 つ (またはそれ以上) のインスタンスを実行できないようにします。それを行う簡単で信頼できる方法はありますか?IPアドレスに基づいてそれらをフィルタリングしたくありません。

LocalConnection を使用しようとしましたが、信頼できませんでした。ほとんどの場合は機能しましたが、何らかの理由で失敗することもありました。

次に、SharedObject を使用してランダムな値を書き込み、定期的な間隔の変更を確認しようとしました。アイデアは、2 番目のインスタンスが開始されると、以前の値が上書きされ、最初のインスタンスのチェックインが失敗するということです。

public function MultiboxPreventer(callback:Function)
{
     uniqueKey = Math.random() * uint.MAX_VALUE;

     so = SharedObject.getLocal("prefs");
     so.data.multiboxKey = uniqueKey;
     so.flush();
     trace("MB init: " + so.data.multiboxKey);
     so = null;

     this.callback = callback;

     var t:Timer = new Timer(10000, 0);
     t.addEventListener(TimerEvent.TIMER, checkKey);
     t.start();
}

private function checkKey(event:TimerEvent):void {
     so = SharedObject.getLocal("prefs");
     if(so.data.multiboxKey != uniqueKey) {
        callback();
     }
     trace("MB check: " + so.data.multiboxKey);
}

しかし、これをテストすると、各インスタンスが独自の SharedObject を持っているかのように動作するため、互いの値を書き換えることはありません。

これを達成するための最良の方法は何ですか?

4

1 に答える 1

0

ローカル接続を使用
する 接続が既に存在する場合、接続が既に使用されている場合は接続が失敗するため、別のゲームが開いていることがわかります。
もちろん、これは 1 台のコンピューターにのみ適用されます。

import flash.net.LocalConnection
var lcReceiver:LocalConnection = new LocalConnection();
try {
  lcReceiver.allowDomain('*')
  lcReceiver.connect( '_tectcon');
} catch (error:ArgumentError) {
  trace('CONNECTION FAILURE ' + error.message )
}
于 2011-09-29T18:15:54.343 に答える