在iOS上用box2d实现台球模拟

时间:2012-12-21 09:35:07

标签: iphone ios box2d

使用此属性:

b2FixtureDef ballShapeDef;
    ballShapeDef.shape = &circle;
    ballShapeDef.density = 1.0f;
    ballBodyDef.linearDamping = 1.0f;
    ballBodyDef.bullet = YES;
    ballShapeDef.friction = 1.0f;
    ballShapeDef.restitution = 0.7f;
    ballBodyDef.angularDamping = 3;

我试图在一个设定为重力(0,0)的世界中模拟一个球池并击球 像这样的球:

- (void) applyShot:(float) ang {

    float vx = 10 * cosf(ang);
    float vy = 10 * sinf(ang);

    b2Vec2 velVec = _whiteBall->GetLinearVelocity();
    velVec.x += (vx * 10);
    velVec.y += (vy * 10);

    _whiteBall->SetLinearVelocity(velVec);

}

球真的表现得有点不切实际,因为它“滑行”太多了 在强力射击后慢慢地在桌子上,而不是停止。

我的桌子边框是静态墙,就够了吗?

此致 米尔扎

1 个答案:

答案 0 :(得分:1)

通过直接设定线速度,台球不参与物理模拟。相反,您将需要使用

_whiteBall->ApplyForce(velVec, _whiteBall->GetWorldCenter());

_whiteBall->ApplyLinearImpulse(velVec, _whiteBall->GetWorldCenter());

我强烈推荐linear movementconstant speed上的iforce2d教程,以便真正了解正确与Box2D机构交互的方式。