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

2022-08-26 16:48:28 字數 1342 閱讀 1299

接著上次的文章

在很多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

最終效果也能夠讓人滿意。

that『s all

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

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

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

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

編寫儲存過程將異常節點移動到新建的乙個節點下

在處理之前,新節點的相關資訊已經插入到表中了 v normal node res id 唯一正常的節點的res id v new node res id 新建的節點的res id 功能 將異常節點及其子節點移動到新建的乙個節點,作為其子節點 注意 需要獲取新節點的級別,比如說為3 則需要做的操作如下...