body自然的按照乙個指定速度移動

2021-06-12 03:27:09 字數 1289 閱讀 6198

在很多box2d遊戲中同樣會遇到這樣乙個問題:

如何使乙個body自然的按照乙個指定速度移動?

方法同上次所說的有三種:

1-直接設定body的線速度

這是最直接的方法,但是同樣的,並不是在box2d中最好的方法

b2body *body;//

the body you want to conroll

b2vec2 vel;//

the vel you set

body->setlinearvelocity( vel );

這樣做,如果只有乙個物體,你可以得到你想要的效果,但是如果有許多body,你會發現很多不符合物理規律的現象,這是由於你改變了body正在模擬的物理屬性。

2-對body施加乙個作用力

這種方法較前者更優,用到了動量定理ft = mv。

已知乙個物體的初速度vel,和物體質量body->getmass(),你要設定他t秒後的速度要變為desiredvel的話,可以計算出需要的力f=(v2-v1)*m/t

**如下:

b2vec2 vel = body->getlinearvelocity();

float m = body->getmass();//

the mass of the body

float t = 1.0f/60.0f; //

the time you set

b2vec2 desiredvel = b2vec2(10,10);//

the vector speed you set

b2vec2 velchange = desiredvel -vel;

b2vec2 force = m * velchange / t; //

f = mv/t

這裡得到的效果應該是和設定速度是一樣的,但是如果有多個物體時,能夠正確模擬碰撞對物體產生的效果。

3-對body施加乙個衝量

這種方法本質上和施加力是一樣的,但是可以不用考慮時間因素

b2vec2 vel = body->getlinearvelocity();

float m = body->getmass();//

the mass of the body

b2vec2 desiredvel = b2vec2(10,10);//

the vector speed you set

b2vec2 velchange = desiredvel -vel;

b2vec2 impluse = m * velchange; //

impluse = mv

BOX2D 自然的移動到乙個指定速度

接著上次的文章 在很多box2d遊戲中同樣會遇到這樣乙個問題 如何使乙個body自然的按照乙個指定速度移動?方法同上次所說的有三種 1 直接設定body的線速度 這是最直接的方法,但是同樣的,並不是在box2d中最好的方法 b2body body the body you want to conro...

Python實現按照指定要求逆序輸出乙個數字的方法

問題是 輸入乙個數字,按照指定要求逆序輸出該數字,很簡單,下面是實現 usr bin env python encoding utf 8 author 沂水寒城 功能 逆序輸出乙個數字 如果數字是正數直接輸出如 177 771 如果數字是負數保留負號如 945 549 如果數字以0結果逆序後需要去除...

BOX2D 自然的旋轉到乙個指定角度

在box2d 中如何控制body 自然的旋轉到乙個指定角度?這個問題在許多遊戲中控制角度時都會遇到,但是在box2d中,你必須考慮到如果轉動中與其他body碰撞等物理因素。能夠想到的解決方案有三種 1 在update方法裡不斷更改body的角度,使他接近於要設定的角度。b2vec2 clickedp...