關於PhysicsBody碰撞

預設中,PhysicsBody碰撞後會產生旋轉
請問要如何讓PhysicsBody碰撞後不會旋轉?

之前用cocos2d-x 3.0有
void PhysicsBody::setRotationEnable(bool enable)
這個function可以使用

https://github.com/cocos2d/cocos2d-x/blob/0f942d341775ece1fdf110a11baf1dfd635a8623/cocos/physics/CCPhysicsBody.cpp

但在quick cocos2d-x沒有此函式
想請問在quick cocos2d-x 如何可以達到同樣的方法?

自己的問題自己解XD
先感謝 cocos2d-x 與 quick-cocos2d-x 為open source

在cocos2d-x 3.0中


void PhysicsBody::setRotationEnable(bool enable)
{      
    if (_rotationEnabled != enable)
    {
        cpBodySetMoment(_info->getBody(), enable ? _moment : PHYSICS_INFINITY);
        _rotationEnabled = enable;
    }
}

要把body:setRotationEnable(false)

其實就是執行


cpBodySetMoment(_info->getBody(),PHYSICS_INFINITY);

另外在quick-cocos2d-x 2.x中


void CCPhysicsBody::setInertia(float inertia)
{
    cpBodySetMoment(m_body, inertia);
}

在Chipmunk論壇中也說了
“For limiting rotation you should set the inertia to infinity on the boxes.”

所以要讓物體碰撞後不旋轉,只要把inertia(慣性)設為極值就可以了

INFINITY定義在chipmunk_types.h中
沒有porting到lua過來

所以我使用lua的極值來達成
如下


body:setInertia(math.huge)

測試後,碰撞不旋轉達成
如有問題可以再討論

:12:

谢谢楼主分享,自己动手丰衣足食。