Box2D自定义重力

Posted codeing or artist ?

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Box2D自定义重力相关的知识,希望对你有一定的参考价值。

需要给刚体添加一个自定义的属性:m_customGravity,这样就可以动态的修改每一个刚体自定义的重力,查找box2d源码大约在5486行,加上红色的一句代码

 

b2Island.prototype.Solve = function (step, gravity, allowSleep) {
      var i = 0;
      var j = 0;
      var b;
      var joint;
      for (i = 0;
      i < this.m_bodyCount; ++i) {
         b = this.m_bodies[i];
         if (b.GetType() != b2Body.b2_dynamicBody) continue;

         gravity = b.m_customGravity || gravity;         

         b.m_linearVelocity.x += step.dt * (gravity.x + b.m_invMass * b.m_force.x);
         b.m_linearVelocity.y += step.dt * (gravity.y + b.m_invMass * b.m_force.y);
         b.m_angularVelocity += step.dt * b.m_invI * b.m_torque;
         b.m_linearVelocity.Multiply(b2Math.Clamp(1.0 - step.dt * b.m_linearDamping, 0.0, 1.0));
         b.m_angularVelocity *= b2Math.Clamp(1.0 - step.dt * b.m_angularDamping, 0.0, 1.0);
      }
..............代码略........................
..................................
.................................
};

 

使用的方法:

//创建一个圆形刚体
var circle = new Circle({x:mousePoint.x,y:mousePoint.y,r:20,type:sc.dynamicBody});
//给该刚体加上m_customGravity属性,并赋值垂直重力为1
circle.b2Obj.body.m_customGravity = new xengine.EasyB2D.b2Vec2(0,1);

以上是关于Box2D自定义重力的主要内容,如果未能解决你的问题,请参考以下文章

php 重力Wiz //重力形式//通过[gravityforms]短代码自定义字段属性

重力表单 - 添加自定义事件不通过Google跟踪代码管理器触发

cocosjs-Box2d

php 重力Wiz //重力形式//修改自定义字段的日期格式

php 重力Wiz //重力形式//更好的库存//按ACF自定义字段限制

如何在自定义 Android 视图中检查重力标志?