Android開發_libgdx遊戲引擎教程 效能優良的遊戲引擎—libgdx (五)

來源:互聯網
上載者:User

一、

 

libgdx是一個跨平台的2D/3D的遊戲開發架構,它由Java/C/C++語言編寫而成。ibgdx相容大多數微機平台(標準JavaSE實現,能運行在Mac、Linux、Windows等系統,最近加入了對html5的支援)與Android平台(Android1.5以上即可使用,Android2.1以上可滿功率發揮)。Libgdx以native方式內建映像解碼器,通過其提供的Pixmap可以對指定映像進行像素級渲染操作,從而不依賴Android的Bitmap載入處理映像,可以支援png、jpg、bmp,最近的兩個版本中加入了對gif圖片的支援(如果要做大量動畫的話,gif圖片可以保證在圖片品質降低不了太多的情況下成倍地縮小,這點大家都懂的)。

        對於libgdx平台的搭建就不過多的贅述了,大家可以參看安卓巴士裡另一個文章http://www.apkbus.com/android-19745-1-1.html
,裡面一些部分講的還是很詳細的,可以協助大家快速入門。至於本系列的教程則定位為協助大家在入門的基礎上進一步實際操作,並且分享一些我曾經遇到過的問題,避免大家再在這些問題上糾纏浪費了寶貴的時間。           大家可以去http://code.google.com/p/libgdx/下載最新的libgdx。這裡還要提示一下大家,libgdx分為 latest releases和nightlies兩種,前者是正式發布的版本,後者則是隨時修正隨時更新的版本,建議沒有什麼特別需要的話,最好使用lastest release的版本,避免遇見一些很奇怪的問題,我使用的是最新的0.9.4的版本,其中加入了很多新的內容(包括3D),效率相對於老版本也有很明顯的提高,最好不要使用0.9.2的版本,因為0.9.4版本修改了一部分介面,我曾經在把自己的遊戲的libgdx的版本從0.9.2更新到0.9.4的時候花了一部分時間重新修改代碼,因為原來的介面和函數已經被廢棄了…           第一篇文章主要是介紹性的內容,為了使大家先瞭解一些,這裡就先貼出一個最簡單的demo供大家學習(前提是你已經搭建好了Libgdx環境才可以哦)。這裡順便說一句,開發Android平台的遊戲,只需:
  • armeabi/
  • armeabi-v7a/
  • gdx-backend-android.jar
  • gdx.jar

這四個檔案就可以了,具體的使用方法可以http://www.apkbus.com/android-19745-1-1.htm 

Libgdx是一款支援2D與3D遊戲開發的遊戲類庫,相容大多數微機平台(標準JavaSE實現,能運行在Mac、Linux、Windows等系統)與Android平台(Android1.5以上即可使用,Android2.1以上可滿功率發揮)。

logo:

2012-1-16 22:24 上傳

下載附件(5.65 KB)

地址:http://code.google.com/p/libgdx/

首先下載最新的jar,我下載的是libgdx-0.9.2。

2012-1-16 22:24 上傳

下載附件(49.84 KB)

建立一個Android項目,File -> New -> Project -> Android Project。我選的SDK是1.6的,最低選擇應該是1.5.

建立一個檔案夾libs(這個名字是固定的,不能隨意改),將下載到的jar複製進去,android平台只需要複製gdx.jar和gdx-backend-android.jar。

增加引用,然後將armeabi和armeabi-v7a兩個檔案夾複製到libs檔案夾中。

嚴格按照步驟!!!!!!!!!!!!!!!!!!!!!!

2012-1-16 22:24 上傳

下載附件(46.63 KB)

然後寫個小東西測試一下環境有沒有問題。

建立類HelloGameActivity,繼承AndroidApplication類。

  1. package com.cnblogs.htynkn;
  2. import com.badlogic.gdx.backends.android.AndroidApplication;
  3. import android.os.Bundle;
  4. public class HelloGameActivity extends AndroidApplication {   
  5.     @Override
  6.     public void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.         initialize(new FirstGame(), false);
  9.     }
  10. }

複製代碼

  1. initialize(new FirstGame(), false);

複製代碼就是啟動遊戲的關鍵,FirstGame是一個實現了ApplicationListener的類。代碼如下

  1. package com.cnblogs.htynkn;
  2. import com.badlogic.gdx.ApplicationListener;
  3. import com.badlogic.gdx.Gdx;
  4. import com.badlogic.gdx.graphics.GL10;
  5. import com.badlogic.gdx.graphics.g2d.SpriteBatch;
  6. public class FirstGame implements ApplicationListener {
  7.     //繪圖用的SpriteBatch
  8.     private SpriteBatch batch;
  9.     @Override
  10.     public void create() {
  11.         batch = new SpriteBatch(); //執行個體化
  12.     }
  13.     @Override
  14.     public void dispose() {
  15.         // TODO Auto-generated method stub
  16.     }
  17.     @Override
  18.     public void pause() {
  19.         // TODO Auto-generated method stub
  20.     }
  21.     @Override
  22.     public void render() {
  23.         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); //清屏
  24.         batch.begin();
  25.         batch.end();
  26.     }
  27.     @Override
  28.     public void resize(int width, int height) {
  29.         // TODO Auto-generated method stub
  30.     }
  31.     @Override
  32.     public void resume() {
  33.         // TODO Auto-generated method stub
  34.     }
  35. }

複製代碼因為沒有寫實際的東西,所以效果是一個黑黑的框。
2012-1-16 22:24 上傳

下載附件(14.37 KB)
環境搭建就說到這裡,下一篇是關於圖片繪製的。注意:如果仔細觀察Logcat,就會發現一個error:E/libEGL(382): couldn't load <libhgl.so> library (Cannot load library: load_library[984]: Library 'libhgl.so' not found)這個沒什麼關係,這是系統嘗試載入硬體OpenGL驅動失敗了,然後回到軟體的處理方法上,不是缺陷或者錯誤。   我們先寫一個類

  1. public class MyGame implements ApplicationListener {
  2.         public void create () {
  3.                 // STUB
  4.         }
  5.         public void render () {
  6.                 // STUB
  7.         }
  8.         public void resize (int width, int height) {
  9.                 // STUB
  10.         }
  11.         public void pause () {
  12.                 // STUB
  13.         }
  14.         public void resume () {
  15.                 // STUB
  16.         }
  17.         public void dispose () {
  18.                 // STUB
  19.         }
  20. }

複製代碼

          ApplicationListener是一個介面,我們很容易可以看出,實現了這個介面的類都有一個共同的特點,它們都會經曆一個建立,渲染(render),暫停,繼續,銷毀等一系列過程,發生對應時間的時候會自用調用相應的函數。特別是render()函數,它是一個系統在不停調用的函數(當然這個執行個體滿足正在啟動並執行條件),因此我們可以把很多操作放在render()函數中實現,不過千萬注意不要進行耗時的操作以免堵塞UI線程。    下面我們就要啟動一個Libgdx遊戲了!另外寫一個類

  1. public  class LibgdxActivity extends  AndroidApplication {   
  2.     @Override
  3.     public void onCreate(Bundle savedInstanceState) {
  4.         super.onCreate(savedInstanceState);
  5.         initialize(new MyGame(), false);
  6.     }
  7. }

複製代碼               這就完成了第一個libgdx程式的編寫!當然源碼中需要加入各種import xxxx,這裡就不添加了,另外會把源碼附上,可以供大家下載。

          查詢官方文檔,可以看到
java.lang.Object
| Activity
|com.badlogic.gdx.backends.android.AndroidApplication
這意味著什麼呢??也就是說,AndroidApplication繼承自API中的Activity,因此我們使用它也需要在Manifest中註冊,這裡就不再具體說明如何註冊了,大家應該都是知道的吧!另外,這裡也提供了一個更好的問題供大家思考,既然AndroidApplication繼承自Activity,那麼是不是可以像其他Activity一樣使用Intent進行跳轉呢?答案是肯定的,不過事情也並沒有這麼簡單,我將在後面的文章裡面重點討論這個問題。

           至於initialize(new  MyGame (), false);這一條語句,這裡解釋一下,這是啟動libgdx的一個必備的條件,不執行該語句libgdx就無法啟動,第一個參數是一個實現了ApplicationApplication介面的類的執行個體,第二個參數如果設為true,則在opengl 2.0可用的情況下會使用opengl 2.0

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.