具有同步和非同步主体的2D物理,网络游戏。碰撞

时间:2017-03-09 17:36:16

标签: javascript synchronization box2d game-physics

p2.js - 物理2d引擎

让我们说我们有通过互联网同步网络的机构 但我们也有不同步的身体,为什么?

例如雨滴或其他一些粒子效应。

雨滴需要与地面碰撞,飞溅或类似的东西。 但它们不会影响地面的速度,因为它会使网络游戏失去同步。

如果非同步体与同步体发生碰撞(雨滴与嗯也会向上/向下移动),则所有产生的力都需要应用于不同步体(雨滴)。

问题:

如何在p2.js中实现? (甚至在box2d中,也许它也会有所帮助)

具有属性(由我扩展)属性.sync设置为false的动态主体不会影响身体的.sync设置为真的速度/位置

1 个答案:

答案 0 :(得分:0)

在p2.js引擎中只需覆盖此方法:

p2.Equation.prototype.addToWlambda = function(deltalambda) {
  var bi = this.bodyA,
      bj = this.bodyB,
      invMassi = bi.invMassSolve,
      invMassj = bj.invMassSolve,
      invIi = bi.invInertiaSolve,
      invIj = bj.invInertiaSolve,
      G = this.G;

      //injection part
      if ( !bi.sync && bj.sync ) { //.sync is my field of Body "class"
        invMassj = 0;
        invIj = 0;
      }
      else if ( !bj.sync && bi.sync ) {
        invMassi = 0;
        invIi = 0;
      }
      //injection part end

  // v_lambda = G * inv(M) * delta_lambda

  addToVLambda(bi.vlambda, G[0], G[1], invMassi, deltalambda, bi.massMultiplier);
  bi.wlambda += invIi * G[2] * deltalambda;

  addToVLambda(bj.vlambda, G[3], G[4], invMassj, deltalambda, bj.massMultiplier);
  bj.wlambda += invIj * G[5] * deltalambda;
}

到目前为止一切顺利。现在它有效。