編輯:Android游戲開發
在游戲開發中難免會需要模擬現實情況,一般常見的就是模擬物理世界。
比如物體碰撞,車輛前進,物體下落等。也許有人會覺得原來有實現過一些效果沒有看到用什麼物理知識呢。
在我看來引入物理引擎並不是必須的,但是這樣可以讓游戲更逼真。物理引擎的話首選Box2d,但是它是C++寫的,直接用不方便。
在Android游戲開發中使用物理引擎一般有三個比較好的選擇:
1.JBox2d
Box2d的Java移植版本,速度有點慢。不過對於不熟悉C++的朋友而言這個可以拿來看看原理。
2.Havok
這個就不多說了,我怎麼沒有用過。
3.Libgdx
libgdx用了jni封裝了box2d,速度和易用性都不錯。
下面我們來看看一個示例,原來沒有接觸過box2d的朋友最好先找資料看看。
代碼如下:
我們先創建了一個世界,重力為9.8,方向朝下。
然後聲明了一個物體定義,物體為動態物體(就是可以動那種),如果創建一個圓形,將形狀賦給物體。
然後調用進行模擬
world.step(Gdx.app.getGraphics().getDeltaTime(),3,3);
效果如下:
其實用法什麼沒有大的區別。libgdx並沒有AABB那個類,要這只邊界的話用
world.QueryAABB(callback,lowerX,lowerY,upperX,upperY)
就行了。
形狀的話其實有很多,圓形,方形,矩形,多邊形,可以具體參考Box2d的幫助文件。
有人覺得使用box2d很復雜,很難和現有的東西聯系起來。其實我覺得box2d用著很方便,特別是和Stage聯系起來很方便。
用
Body.setUserData(userData)
將Actor的名字賦給Body,然後在繪制時用
Stage.findActor(name)
改變actor的位置和狀體就行了。
寫在最後:
這裡想說幾個問題:
1.Box2d是一個物理引擎,不是一個游戲引擎。它模擬物理世界和法則,但是你的圖像繪制什麼的都是自己處理。
2.Box2d的單位是米,秒。注意單位換算,不推薦直接用1像素=1米,這樣有些東西會很奇怪的,比例看情況,用個30,,50就行了。
3.Stage的坐標是左下角,Box2d一般是重心,注意變化。
4.調試的時候可以用Box2DDebugRenderer,可以清楚看到邊界和重心。
1. 幀動畫的原理 幀動畫幀動畫顧名思義,一幀
第15天: Android“後退”按鈕、主菜單、固定坐標bug 還記得第11天屏幕坐標和鼠標點擊射擊不到外星人的問題嗎?是
第6天:第一批外星人和屏幕方向 好了,現在有了一些復古風格的外星人它們正在到處飛。抱歉,暫時還沒有demo。這款Andriod游戲目前只有.apk
上回說到由於如何搭建了一個Android開發環境,如有不懂,還需google一