0

使用此属性:

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);

}

球的表现确实有点不切实际,因为它在击球后在台面上“滑”得太慢了,没有停下来。

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

问候米尔扎

4

1 回答 1

1

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

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

或者

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

我强烈推荐 iforce2d 关于线性运动恒速的教程,以真正了解与 Box2D 物体交互的正确方式。

于 2012-12-21T19:49:30.503 回答