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

Box2Dボディと対話する正しい方法を実際に感じるために、線形運動一定速度に関するiforce2dチュートリアルを強くお勧めします。

于 2012-12-21T19:49:30.503 に答える