2 study cocos2dx study_cocos2dx 于 2014.08.23 15:09 提问

关于Box2d-自定义重力

下面是我在网上找的关于Box2d-自定义重力的设置教程---

cocos2dx box2d 自定义/重置重力

Box2D中的Dynamics包下有一个b2Island类,类中有一个Solve方法,这方法通过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;

所谓重置重力,就是在这里动手脚了。要怎么做呢?把这个gravity形参改成我们想要的重力,比如可以像下面的代码,设置为0.

        gravity = new b2Vec2(0, 0);

        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;

或者我们用了一个更便于重用的方法,在b2Body类添加一个b2Vec2类型的公共属性m_customGravity,然后在b2Island.Solve()方法中,判断是否设置了刚体的m_customGravity属性,如果有,则用m_customGravity进行重力模拟计算。然后我们在创建刚体时,只要设置一下m_customGravity属性就可以轻松重置重力了。

        //2012-7-27

        //added by ladeng6666

        //如果刚体有自定义m_customGravity属性,则用其进行重力模拟计算

        if (b.m_customGravity != null) {

            LDgravity = b.m_customGravity;

        }else {

            LDgravity = gravity;

        }

        //用更新后的LDgravity属性进行重力模拟计算

        b.m_linearVelocity.x += step.dt * (LDgravity.x + b.m_invMass * b.m_force.x);

        b.m_linearVelocity.y += step.dt * (LDgravity.y + b.m_invMass * b.m_force.y);

        b.m_angularVelocity += step.dt * b.m_invI * b.m_torque;

请问在"或者我们用了一个更便于重用的方法,在b2Body类添加一个b2Vec2类型的公共属性"之后的操作..

应该怎么完成,语句应该怎么添加?b2Body类跟b2Island我都找到了已经.但是具体修改.我试了一下都有错误

教程原文地址:
http://www.ladeng6666.com/blog/2012/09/06/box2d%E8%87%AA%E5%AE%9A%E4%B9%89%E9%87%8D%E5%8A%9B/

我已经在b2Body.h中添加

CSDN移动问答
我添加有没有错误呢?

还是应该放在这里呢?

CSDN移动问答

有人说原教程的是AS的代码..会不会有影响呢?

1个回答

ladeng6666
ladeng6666   2014.09.06 10:55

我时那篇教程的作者,你的贴图是盗链,看不到原图,你可以微博@ladeng6666,我看看能否帮的上你!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!