【问题标题】:2D physic, netplay with sync and not-sync bodies. Collisions2D 物理,具有同步和非同步主体的网络游戏。碰撞
【发布时间】:2017-03-09 17:36:15
【问题描述】:

p2.js - 物理 2d 引擎

假设我们有通过互联网同步的身体以进行网络游戏 但是我们也有不同步的实体,为什么?

例如用于雨滴或其他一些粒子效果。

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

如果非同步主体与同步主体碰撞(雨滴与 uhm 也向上/向下移动),则需要将产生的所有力施加到非同步主体(雨滴)。

问题:

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

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

【问题讨论】:

    标签: javascript synchronization box2d game-physics


    【解决方案1】:

    在 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;
    }
    

    到目前为止一切顺利。现在它可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-25
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多