2011-09-24 81 views
3

我想提出一个Box2D的游戏,并有敌人从屏幕的左侧飞在屏幕的右侧。如果我使用如下所示的勾号方法施加力量,那么随着时间的推移,敌人会越来越快地移动。我希望敌人以恒定的速度前进,而不是提高速度。我怎样才能做到这一点。我曾尝试的冲动和力量,但他们似乎并没有保持恒定的速度如何使以恒定速度移动b2body与Box2D的

b2Vec2 forceA = b2Vec2(15, -b->GetMass() * world->GetGravity().y); 
b->ApplyForce(forceA, b->GetWorldCenter()); 

回答

2

只是你想要的速度创建它们:

b2BodyDef bDef; 
... 
bDef.linearVelocity = myVelocity; 
b2Body *b = world->createBody(&bDef); 

如果没有力施加于他们,他们会根据牛顿第一定律保持速度。如果你有重力,然后每一步用力:

b2Vec2 forceA = b2Vec2(0, -b->GetMass() * world->GetGravity().y); 
b->ApplyForce(forceA, b->GetWorldCenter()); 
1

使用b->SetLinearVelocity(b2Vec2(thisVel, 0));。如果该等速最终可能为其他等速改变,你可以在包装这一个条件,如

if(b->GetLinearVelocity().x != 0){ 
    b->SetLinearVelocity(b2Vec2(0, 0)); 
} 

所以,你没有重新应用相同的速度每个刻度(尽管它可能是Box2D的照顾这个给你,不知道这一点)。

我碰到了如何让身体以恒定速度移动的同一问题,我推荐的另一件事是确保身体移动的表面/媒介是无摩擦的 - 这样他们会设定速度后永不放慢速度。