在AS3中实现确定性物理的任何方法?

时间:2014-07-06 01:36:12

标签: actionscript-3 box2d physics deterministic

似乎Box2D for actionscript 3不具有确定性,这意味着,如果多人游戏中物理在确定谁赢/输的过程中起着重要作用,如果他们的微处理器来自每个用户,结果会有所不同不同的技术(例如intel和amd)。

那么,有没有办法在AS3中实现确定性物理?这是在以前实现的吗?。

感谢。

1 个答案:

答案 0 :(得分:0)

我曾经遇到过这个问题。

我们在Shockwave Director中使用了Havok引擎来模拟逼真的2人3D游戏池。

最好在服务器上处理,以确保准确性和安全性。但是,我无法负担任何服务器端物理处理,即使启动参数相同,客户端处理也会为不同的客户端提供不同的结果。

我们的案例并非100%适用于任何多人游戏,但可以进行调整。这是一个回合制游戏,每个玩家都进行了罢工,球被Havok处理,两个玩家都必须看到相同的最终结果。

所以,我们做了以下事情:

  1. 轮到他的球员是主力球员。他进行罢工。他的打击数据(打击力,提示位置和旋转)被发送到服务器并从服务器发送到第二个玩家。
  2. 两位玩家都在本地进行模拟。它们都具有相同的打击数据,因此结果大致相同。
  3. 在主要玩家的模拟停止后,他将最后的球位置发送到服务器,服务器将它们发送给第二个玩家。一旦第二个玩家模拟停止,他就会使用来自主要玩家的数据调整最终的球位置。这看起来像是球已停止然后跳到略有不同的位置。
  4. 总的来说,这并非如此。看起来过于平滑,但它会确保每回合开始时玩家都会看到相同的比赛配置。

    将此方法应用于更通用的多人游戏(例如,无转弯的连续动作,超过2名玩家),可以做类似的事情:

    1. 选择(可能是随机的,可能基于某些特定数据,如延迟等)作为主要玩家。
    2. 收集所有玩家的所有动作数据,在本地运行他们的模拟。
    3. 不时制作主要播放器数据的快照,并通过服务器更新将其发送给其他玩家。其他玩家必须根据接收的数据调整他们的模拟(改变对象位置以及他们的角度,冲动等)。更频繁地执行快照将导致更平滑的模拟,但会增加流量。