1

我正在做这个台球游戏:

http://cassinlwbg.facebook.joyent.us/quickpool/main.swf

请在两个浏览器窗口中打开它,您将看到 2 播放器模式启动。

当你投篮时,每一个投篮都会被复制给其他球员。

不幸的是,它不够精确。

玩家使用以下代码进行射击:

protected function makeShot(str:Number, ang:Number):void {

   var vx = str * Math.cos(ang);
   var vy = str * Math.sin(ang);

   var vel = _whiteBall.body.GetLinearVelocity();

   vel.x += (vx * 10);
   vel.y += (vy * 10);

   _whiteBall.body.SetLinearVelocity(vel);

  }

之后,我通过套接字服务器将 STRENGTH 和 ANGLE 参数发送给其他玩家。

即使在字符串到数字转换之后,它们也完全相同(经过测试)。

然后我将它应用于远程播放器,作为远程​​拍摄,如下所示:

//run remote shot
public function applyMove(s:Number, ang:Number){
   makeShot(s, angle);
}

尽管如此,在几次投篮之后,比赛和球位不同......这打破了比赛流程。

有人知道为什么吗?

如您所见,两个游戏文件相同。

哪里有这么大的偏差?

问候,米尔扎

4

2 回答 2

3

可能是性能差异影响了 Box2D 进行数值积分的时间间隔。您需要以某种方式同步位置。首先想到的是选择一台机器作为主机,另一台机器作为从机,并将主机的位置复制到从机,在它们很小的时候消除差异。

于 2010-12-26T15:06:38.813 回答
0

是否取决于具有完全相同的屏幕尺寸?

你确定你没有使用任何使用 rand 的函数吗?或者作为输入的时间?

于 2010-12-26T05:11:21.203 回答