Bug?关于b2RevoluteJoint的疑惑

最近正在学习cocos,过程中偶尔会遇到令人不解的bug。因为我是跟着视频学习的,代码也和视频中书写的一样(他使用的是mac平台),
我在VS2015中复写了一遍,大部分是没问题的,但有两个地方无论如何也无法实现:一个是(引力)传感器,另一个就是本文要阐述的问题。

视频中用到了一个绘图类:DrawHelper,这个类是用来绘制图形的。

static b2Body * createBox(b2World* world, float posX, float posY, float width, float height, bool isStatic=false, void * userData = nullptr);
static b2Body * createCircle(b2World* world, float posX, float posY, float radius, bool isStatic = false, void * userData = nullptr);

用到了以上两个方法。这个类的绘制是没问题的。

然后我自己写了个专门测试关节的JointKit,这个类封装了几个关节创建的过程。
    <pre class="brush:cpp; toolbar: true; auto-links: false;">void createRevoluteJoint(b2World* world, b2Body * bodyA, b2Body * bodyB, bool isEnableMotor = false, float _motorSpeed = 0, float _maxMotorToque = 0);

用到了上面一个方法。这个过程只是简单封装,也是没问题的。

在视频写的Scene中:

//创建第一个body,十字形,模拟旋桨
auto windMill = DrawHelper::createBox(_world, _size.width / 2, _size.height*0.75, 200, 25);
//从这↓
b2PolygonShape box2;
box2.SetAsBox(25 / 2 / PTM_RATIO, 200 / 2 / PTM_RATIO);
b2FixtureDef box2Def;
box2Def.shape = &box2;
//到这↑ 这不就是添了个b2FixtureDef吗
//然后用body创建一个夹具
windMill->CreateFixture(&box2Def);
//创建第二个body,圆形,用作旋转轴
auto axis = DrawHelper::createCircle(_world, _size.width / 2, _size.height*0.75, 25 / 2, true);
//利用工具类
JointKit * jointKit = new JointKit();
jointKit.createRevoluteJoint(axis, windMill, true, 10, 100);
delete jointKit;
jointKit=nullptr;

这个是没问题的,运行后会有一个旋桨加速旋转。

但是我想,既然是个夹具,直接在DrawHelper中直接写一个方法里不就完了?
然后我就在DrawHelper中写了下面这个方法:
    <pre class="brush:cpp; toolbar: true; auto-links: false;">//绘制风车
    static b2Body * createWindMill(b2World* world, float posX, float posY, float width, float height, bool isStatic = false, void * userData = nullptr);
    //实现过程很简单,
    //就是创建了一个b2Body对象,
    //两个b2FixtureDef对象(存放了两个矩形)
    //然后通过body->CreateFixture()创建两个夹具。
    b2Body * DrawHelper::createWindMill(b2World * world, float posX, float posY, float width, float height, bool isStatic, void * userData)
    {
        //声明b2BodyDef
        b2BodyDef bodyDef = DrawHelper::generalProcess(world, posX, posY, isStatic, userData);

        //创建风车
        b2FixtureDef jointA, jointB;
        b2PolygonShape fanPaddleA, fanPaddleB;
        fanPaddleA.SetAsBox(width / PTM_RATIO / 2, height / PTM_RATIO / 2);
        fanPaddleB.SetAsBox(height / 2 / PTM_RATIO, width / 2 / PTM_RATIO);
        jointA.shape = &fanPaddleA;
        jointB.shape = &fanPaddleB;

        auto body = world->CreateBody(&bodyDef);
        body->CreateFixture(&jointA);
        body->CreateFixture(&jointB);
        return body;
    }

我觉得和上面方法的得到的旋桨(b2Body)对象一样啊!
可是我通过这方法创建的body,利用jointKit.createRevoluteJoint(axis, windMill, true, 10, 100);传进去后竟然不旋转!

卧槽,为何?这是什么原理?只不过把分两次创建的夹具放在一起创建,为什么就不旋转了呢?