使用此属性:
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);
}
球真的表现得有点不切实际,因为它“滑行”太多了 在强力射击后慢慢地在桌子上,而不是停止。
我的桌子边框是静态墙,就够了吗?
此致 米尔扎
答案 0 :(得分:1)
通过直接设定线速度,台球不参与物理模拟。相反,您将需要使用
_whiteBall->ApplyForce(velVec, _whiteBall->GetWorldCenter());
或
_whiteBall->ApplyLinearImpulse(velVec, _whiteBall->GetWorldCenter());
我强烈推荐linear movement和constant speed上的iforce2d教程,以便真正了解正确与Box2D机构交互的方式。