在testbed例子中,使用鼠标关节操作刚体,他尝试在刚体上驱动一个点,拖向当前的鼠标位置,在旋转方面没有任何限制.
鼠标关节定义有目标点(target point),最大力矩(maxinum force), 平率(frequency)以及阻尼率(damping ratio).目标点最初与物体的锚点重合。最大力矩阻止多个刚体相互作用时产生剧烈的发作用力.频率和阻尼率是用来创建类似于距离关节(distance joint)的弹簧和减震器效果.
鼠标关节定义有目标点(target point),最大力矩(maxinum force), 平率(frequency)以及阻尼率(damping ratio).目标点最初与物体的锚点重合。最大力矩阻止多个刚体相互作用时产生剧烈的发作用力.频率和阻尼率是用来创建类似于距离关节(distance joint)的弹簧和减震器效果.
很多用户为了游戏的可玩性尝试修改鼠标关节.用户希望能够实现精确的定位和及时响应。在这方面鼠标关节的工作效果并不好。所以你可以考虑用动力学刚体(kinematic body)进行代替.
鼠标关节比较简单。下面是代码:
首先在ccTouchBegan中:
//判断鼠标是否点在了刚体上。
CCPoint mousePt = touch->getLocation();
b2Body *pBody = m_world->GetBodyList();
for(; pBody != NULL; pBody = pBody->GetNext())
{
b2Fixture *pFixture = pBody->GetFixtureList();
for(;pFixture != NULL;pFixture = pFixture->GetNext())
{
b2Vec2 mouseVec;
mouseVec.Set(mousePt.x/PTM_RATIO, mousePt.y/PTM_RATIO);
if(pFixture->TestPoint(mouseVec))
{
//创建鼠标关节.
b2MouseJointDef md;
md.bodyA=m_groundBody;//一般为世界边界