【问题标题】:Box2d multiple fixtures and positioningBox2d 多个夹具和定位
【发布时间】:2011-06-10 00:57:56
【问题描述】:

我试图通过像这样连接 3 个矩形在 Box2d(在 Cocos2d 中)中创建一个“U”形:|_|

听起来关节在这里不是正确的解决方案,因为我不想要任何运动,所以我创建了一个主体,它是中间位和侧面的 2 个固定装置。我已经像这样将两侧添加到中间位:

mainBody->CreateFixture(&leftFixtureDef);
mainBody->CreateFixture(&rightFixtureDef);

这可行,但是两侧的固定装置都被添加到主体的中心。我似乎无法弄清楚如何相对于主体定位固定装置。将精灵/节点附加到夹具并更改位置似乎没有什么区别。

有什么想法吗?

非常感谢。

【问题讨论】:

    标签: cocos2d-iphone box2d box2d-iphone


    【解决方案1】:

    它是形状的属性。我没有为 b2CircleShape 找到这样的属性,但对于 b2PolygonShapem_centroid 参数 - 它是相对于身体的形状中心坐标。将其指定为具有有效的形状位置。

    对于 b2PolyganShape,有一个方法 setAsBox(w, h),但还有一个更复杂的方法:

    setAsBox(float32 width, float32 height, const b2Vec2 &center, float32 rotation)
    

    使用此方法或手动指定质心。

    这是U形的代码

    b2BodyDef bDef;
    bDef.type = b2_dynamicBody;
    bDef.position = b2Vec2(0, 0);
    b2Body *body = world_->CreateBody(&bDef);
    
    b2PolygonShape shape;
    const float32 density = 10;
    
    shape.SetAsBox(1, 0.1);
    body->CreateFixture(&shape, density);
    
    shape.SetAsBox(0.1, 1, b2Vec2(-1 + 0.1, 1), 0);
    body->CreateFixture(&shape, density);
    
    shape.SetAsBox(0.1, 1, b2Vec2(1 - 0.1, 1), 0);
    body->CreateFixture(&shape, density);
    

    【讨论】:

    • @Andrew:对于 b2CircleShape,属性是 m_p,即圆的中心位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多