2016年12月2日 星期五

Scratch作品介紹:Impulse衝力2D物理引擎

在之前探索Scratch與物理運算時,偶然發現了這個由griffpatch做出來的
IMPULSE 2D Physics Engine。一見之下,簡直驚~為~天~人~,不認真好好研究真是太可惜了。於是抱著敬畏與學習的心情,把它的操作介面給中文化了,希望可以讓更多人了解物理引擎。(以下皆採用中文化畫面)

中文化網址:https://scratch.mit.edu/projects/133931204/
原作品網址:https://scratch.mit.edu/projects/86958095/


關於作品的名稱,我把它翻為「Impulse衝力2D物理引擎」,Impulse在物理中的意思是「衝量」,不過感覺翻成「衝力」,一般人會較有感覺。

引擎可以用來驅動機械,而物理引擎是一些遊戲中負責處理物理運算的部份。原作者的說明裡提到,這是一個2D的剛體物理引擎。近年來有一些如憤怒鳥遊戲等,就有使用這樣的引擎,讓遊戲中的物件有著真實物體的互動。

這個作品不是遊戲,算是一個遊戲引擎的應用展示,是屬開放式的動作,所以我們可以自由的在裡面做各種力學的實驗。

以下是執行的畫面:


在上圖中,灰色的物件不會移動(可想成是地形),其他的物件受到重力的影響,會一直往下掉,並會表現出物體碰撞後該有的移動反應及旋轉。

畫面上方有一些按鈕,像「物件再生」如果按下,會讓掉下去無底洞的物件,再由最上方隨機位置角度掉下。

上圖中右下角的13,表示場景裡面共有13個物件(含不可移動物件),左上角的FPS變數是每秒畫面數,由於物理引擎的運算是即時的,越多物件時,FPS就會降低。

有時物件會受到地形影響(灰色物件),並卡住。這時可以用滑鼠拖曳,如下畫面有紅色箭頭,再放掉滑鼠時,就會有一隻憤怒鳥出來撞開卡住的物件,可別小看這隻小小的憤怒鳥,由於物理引擎中,憤怒鳥的密度設定是一般物體的8倍,造成小小一隻但質量大(想像成鐵球),所以輕輕鬆鬆就可以撞飛其他物體(地形除外,因地形在物理引擎中的設定是質量無窮大)。



再來還有像是「透視」這個按鈕,會以輪廓來呈現物件,透視的樣子如下圖:



在透視模式中,圓形中的半徑線段代表圓的方向。透視可以很清楚的看到物體在物理引擎中運算的形狀。另外畫面中短短的紅線,是由物理引擎判斷出來的兩兩物體之間碰撞方向。「慢動作」按鈕會讓物理引擎以較慢的時間來進行。



像上圖中的斜面實驗,可以發現這個物理引擎有實作出摩擦力。摩擦力的方向與碰撞方向的夾角為90度(切線方向),並與移動方向相反,也因為摩擦力的關係,讓物件產生力矩,進而讓物體產生旋轉運動。


另外還有「編輯」按鈕,可以用滑鼠的動作,來調整物件的大小、移動、旋轉。
也可以刪除物件(拖到垃圾桶)、複製物件、切換物件為不可移動等。進入編輯模式時,物理引擎會暫時停止運作,等離開時,物理引擎就會繼續執行。

編輯模式的畫面如下,有許多動作只用滑鼠就能達成。作者能用Scratch做出來視覺化的物件編輯,真是太佩服了。


再來就是說明鈕,有相關操作的說明。


還有一個按鈕沒有提到,就是場景,作者有預先製作了一些有趣的場景。看看下方的場景,是不是很熟悉的畫面,而且裡面的物件,會依據衝撞產生該有的移動與轉動。另外原作者有引用憤怒鳥中的一些物件,利用數字鍵1-6就可以按出。


(12/3更新)
有了物理引擎後,當然要來好好使用一下,下面是我利用它所做出來的懷舊遊戲,彈珠台

作品網址:https://scratch.mit.edu/projects/134193915/


其中彈珠、框體及釘子、木板,都是物件, 除了彈珠會落下外,其他的都算是地形。
在左上方,我留了一個Xray(透視)的按鈕,透視的畫面如下圖:


其中的灰色矩形,就是使用地形物件來當作框體,這樣彈珠就會被物理引擎限制在彈珠台內。當然,遊戲還可以再進一步做些計分的動作,亮燈的動畫,不過,對於一個中年人的懷舊作品,這樣就已經很夠了。(註:給兒子試玩後,應要求加了計分功能)

這個物理引擎對我來說,真是太有趣了,由於是以物理來模擬,光是看物體的掉落、碰撞、旋轉,就可以看很久了,因為每次結果都不一樣。真是不敢相信,原作者griffpatch可以在Scratch做出這樣的物理引擎,該有的架構都有了,真是太強大了。對物理模擬或是憤怒鳥有興趣的人一定要好好試試呢!





沒有留言:

張貼留言