編程貓也是基於blockly開發的,其中的物理模塊是其特色之一,也是比scratch強大的地方。
但是很多一線學校的老師對物理引擎比較陌生,這裡簡單介紹一下。
因為時間關係,沒有來得及研究編程貓的物理模塊基於哪個物理引擎開發,希望有知道的朋友可以交流。
![「少兒學編程」編程貓—物理引擎簡談](http://p2.ttnews.xyz/loading.gif)
這裡就引用box2d的一些概念,類比編程貓物理模塊。溫馨提示:本文需要基本的中學物理力學知識。
1、世界world
就像現實的世界,有重力等力影響。牛頓萬有引力,所有的物體(動態體)都要受影響。
![「少兒學編程」編程貓—物理引擎簡談](http://p2.ttnews.xyz/loading.gif)
- 改變地心引力加速度。
- 取值範圍:-10000~10000
- 大小:默認值為10。引力加速度越大,自由落體的速度越快。
- 方向:默認值為-90。引力方向為-90度時,開啟物理引擎后角色會朝正下方墜落。
2、剛體。
默認的角色基本上都是剛體,因為視覺上的彈性物體需要再引入結合部位去深度開發。
在box2d裡有靜態的(static) 、動態的(dynamic) 、動力學學的(kinematic)三類剛體。靜態的一般就類似於地面,永遠不動;動態就是普通的角色體;動力學就是不參與碰撞的質量為0的剛體(乾貨菌:可以理解為可以動的靜態體,不受引力影響的動體)。
動態體:編程貓裡的材質,其實是默認設置了角色的質量、密度、摩擦係數與反彈係數。
- 目前有普通、鐵、木頭和彈性材質四種材質
一些特殊設置,不參與碰撞就可以實現類似動力學剛體的效果。
- 設定角色是否參與物理碰撞。
- 允許傾倒後,物體在往下掉的過程中,會有傾倒效果,傾倒效果跟下落的速度、角色的質量、角色的形狀有關。
3、剛體的屬性
質量、密度、摩擦係數與反彈係數
一般物理引擎默認只有密度,摩擦係數和反彈係數。密度=質量/體積,所以就相當於定義了質量,而且不受形狀大小的改變。
- 可設置角色的密度大小,影響角色質量大小。
- 取值範圍:0~10000
而編程貓裡對質量模塊的解釋如下,基本上跟密度使用一致,個人感覺只是為了便於學生理解,畢竟密度概念生活中不常用。
- 角色的默認質量由角色的大小決定,角色越大,默認質量越大。
- 取值範圍:0~10000
摩擦係數是指兩表面間的摩擦力和作用在其一表面上的垂直力之比值。F=μN。摩擦力是一種阻力。
- 摩擦係數越大,角色本身受外力作用越大,角色受到的阻力越大。
- 取值範圍為0-1,可取小數。
反彈係數:可以理解為牛頓第三定律,反作用力。
- 可輕鬆製作出彈力球碰撞反彈的效果。
- 取值範圍:0-1。
- 同一反彈係數,角色的實際反彈效果受角色形狀和質量(乾貨菌:實際上就是密度)的影響。
4、剛體狀態—力
牛頓在《自然哲學的數學原理》中總結了牛頓三定律,揭示了經典力學在自然萬物的作用,改變剛體的運動狀態。
物理引擎當然離不開力,所謂的各種運動效果,實際上都是各種力的作用。
通過力學公式,可以模擬現實生活物體的狀態。這就涉及到了物理模塊的玩法。
這裡要注意加速度和速度的區別,角色得到一個力是改變加速度。(見中學物理)
編程貓裡的模塊有:
- 設置角色的某個時間點的瞬移速度,方向和大小可以改變。
- 設置角色某個時間點的受力情況。
- 通過設置X軸和Y軸的數值,來決定力的方向和大小。
5、開啟和關閉
最後不要忘記使用的時候要開啟物理引擎,畢竟我們是在模擬真實環境,一個總開關。
閱讀更多 學點乾貨 的文章