官术网_书友最值得收藏!

10.1 物體的運(yùn)動

前面講解了剛體以及關(guān)節(jié),知道了它們在被動地受到重力或者馬達(dá)的作用下,會產(chǎn)生相應(yīng)的物理效果,那么如何主動來控制物體的運(yùn)動呢?

對于關(guān)節(jié),可以用設(shè)置馬達(dá)的方式,馬達(dá)來驅(qū)動關(guān)節(jié)運(yùn)動,而對于剛體,可以通過施加力或者沖量來使其移動,施加角力矩或者角沖量來使其旋轉(zhuǎn)等,聽起來很厲害,但本質(zhì)上都是一些比較簡單的東西,放到代碼中實(shí)現(xiàn)就更簡單了。

10.1.1 施加力和沖量

對一個物體施加力,可以通過下面兩個函數(shù)來實(shí)現(xiàn),ApplyForce第一個參數(shù)決定物體運(yùn)動的方向,單位是牛頓,而第二個參數(shù),決定物體受力點(diǎn)的位置,假設(shè)受力點(diǎn)不在物體上,也是有效的,效果如圖10-1所示,藍(lán)色的受力點(diǎn)在物體外部,當(dāng)對其施加一個向上的力時,可以將受力點(diǎn)認(rèn)為是在正方形的右上角,為物體施加力就像在推動一個物體一樣。

圖10-1 施加力

        ///為物體的point點(diǎn)施加一個方向?yàn)閒orce的力,point是世界坐標(biāo)
        void ApplyForce(const b2Vec2& force, const b2Vec2& point);

        ///對物體的中心點(diǎn)施加一個方向?yàn)閒orce的力
        void ApplyForceToCenter(const b2Vec2& force);

對一個物體施加一個沖量可以用下面的ApplyLinearImpulse()函數(shù)來實(shí)現(xiàn),第一個參數(shù)也是一個力的向量,這個向量的單位是kg·m/s。物體質(zhì)量越大,運(yùn)動的速度會越慢,而為物體施加一個沖量,等于直接賦給物體一個速度,在施加一個很大的沖量的時候,物體會一下子沖出去,然后在摩擦、重力、碰撞的影響下,慢慢衰減下來,就像突然使用了極品飛車的加速氮?dú)庖粯印?/p>

        ///在point上施加向量為impulse的沖量,沖量的單位是kg·m/s
        void ApplyLinearImpulse(const b2Vec2& impulse, const b2Vec2& point);

對比力和沖量,對物體施加力需要通過力來擺脫物體的靜摩擦力,然后慢慢加速,而沖量則是可以直接對物體賦予一個速度。兩種施力的力量參數(shù)的單位是不一樣的,但受力點(diǎn)的意義一樣,不同的受力點(diǎn)會在受力過程中,對物體產(chǎn)生不同的旋轉(zhuǎn)。

10.1.2 角力矩和角沖量

使用下面的函數(shù)可以為物體施加一個角力矩和角沖量,當(dāng)傳入一個正數(shù)時,物體會在逆時針方向上自轉(zhuǎn),而傳入一個負(fù)數(shù)時,物體在順時針方向上自轉(zhuǎn)。傳入的參數(shù)越大,并且物體質(zhì)量越小,轉(zhuǎn)動越快。從本質(zhì)上講,角力矩相當(dāng)于上面的施加力,而角沖量則是直接賦予物體角速度。施加角力矩,物體會慢慢運(yùn)動起來,就像擲鏈球一樣,把鏈球拉起來,慢慢轉(zhuǎn)圈。而施加角沖量,可以讓物體瞬間高速旋轉(zhuǎn)。在沒有收到其他力的作用下,旋轉(zhuǎn)的物體并不會產(chǎn)生移動。

        ///施加一個角力矩,讓物體根據(jù)穿過質(zhì)點(diǎn)的z軸進(jìn)行旋轉(zhuǎn)
        void ApplyTorque(float32 torque);

        ///為物體施加一個角沖量,單位是kg·m/s
        void ApplyAngularImpulse(float32 impulse);
主站蜘蛛池模板: 四子王旗| 西充县| 灵石县| 洞头县| 鄂托克旗| 台中市| 广宁县| 包头市| 西畴县| 扎兰屯市| 博白县| 天长市| 行唐县| 华坪县| 南靖县| 巫溪县| 灌阳县| 格尔木市| 花垣县| 孟村| 寿光市| 保康县| 江城| 泰兴市| 西峡县| 翁源县| 雷波县| 天柱县| 碌曲县| 柏乡县| 托克逊县| 农安县| 黎城县| 巴楚县| 察雅县| 通城县| 如东县| 林甸县| 鄂尔多斯市| 永丰县| 泊头市|