我有多人 Flash 游戏 (AS3),我想防止多选,例如防止用户在一台计算机上运行我的游戏的两个(或更多)实例。有没有简单可靠的方法来做到这一点?我不想根据 IP 地址过滤它们。
我尝试使用 LocalConnection,但它不可靠。它大部分时间都有效,但由于某种原因有时会失败。
然后我尝试使用 SharedObject 向它写入随机值,然后检查周期性间隔的变化。想法是,当第二个实例启动时,它将覆盖以前的值并且签入第一个实例将失败。
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 一样,因此它们永远不会重写彼此的值。
实现这一目标的最佳方法是什么?