2011-09-24 76 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的照顧這個給你,不知道這一點)。

我碰到了如何讓身體以恆定速度移動的同一問題,我推薦的另一件事是確保身體移動的表面/媒介是無摩擦的 - 這樣他們會設定速度後永不放慢速度。

相關問題