最近忽然想用flash來寫一個遊樂場氣動球的小遊戲,
今天就survey了一下ActionScript有沒有現成的物理引擎,
後來主要找到了兩套: APE 和 Fisix
Fisix 是以編譯過後的SWC檔案方式釋出,
但檔案不知為何卻無法import到flash CS3 document裡面使用,
因此只能在Flex ActionScript Project裡面用。
APE有釋出原始碼,因此在Flash CS3裡面也可以使用。
兩個引擎釋出的範例程式都挺有意思的,有興趣可以去看看:
APEExample 1 Example 2
FisixExamples Page

使用兩個引擎各自簡單測試了一下以後,感覺是APE比較好一點。
(詳細心得請繼續閱讀...)
後來就用APE稍微完成了氣動球遊戲的原始雛型,大家可以玩玩看。
還弄了一個白痴對手,不過要打贏真的不太容易...

(如果覺得flash跑的不順暢,可以點此連結開啟只有這個flash的網頁)
因為這是prototype,
所以請不要來抱怨為甚麼遊戲介面很簡陋之類的..(美工苦手做出來的東西當然醜..)
也請不要問為甚麼會有三顆球,因為有人說三顆球比較好玩.. XD
不過如果有關於遊戲上的idea或是碰撞相關的問題,非常歡迎來討論~~

大概介紹一下在兩個引擎使用上感覺的比較:
首先是使用滑鼠控制碰撞物體來說,APE的反應比Fisix好上不少,
APE是指定物體向量,因此要移動物體至某定點較為直接方便。
雖然Fisix也有提供類似的thresh()方法,
但是碰到目標點在碰撞物體內會有一些問題。
另外一點是用Fisix的SWF感覺似乎不是很順暢,
而且用他內建繪圖的方式畫出物體,
會有很明顯的閃爍,看了就不是很爽。

不過APE在物體速度量值較大的情況下,便比較容易出現碰撞穿透的現象,
測試了一下,感覺若是可以把速度量值控制的不大,
或是在較正常的重力模擬情形下,應該不太會發生,
但若是滑鼠快速移動,或是以其他方式產生較大速度量值,
就比較會出現這樣的情況。
另外就是如果同時物體碰撞到多個不同物體,
也會有選擇性碰撞而嵌入或穿透其他物體的情況發生。
雖然文件指出給定multisample參數可以減少碰撞穿透,
不過會使碰撞變得很不正常,感覺非常不自然。
但後來做了一些碰撞物體架構上的修正以後,
已經可以避免一些碰撞穿透出去的現象。
以目前的遊戲雛型來說,除了把球卡在角落會稍微讓球嵌入邊框之外,
應該是不會讓球穿透了出去。
如果有人可以把球撞出去,請一定要來留迴響炫耀一下..XD
arrow
arrow
    全站熱搜

    TBri 發表在 痞客邦 留言(4) 人氣()