遊戲架構Libgdx使用入門

來源:互聯網
上載者:User
轉自:http://blog.csdn.net/cping1982/article/details/6176191#
Libgdx是一款支援2D與3D遊戲開發的遊戲類庫,相容大多數微機平台(標準JavaSE實現,能運行在Mac、Linux、Windows等系統)與Android平台(Android1.5以上即可使用,Android2.1以上可滿功率發揮),

Libgdx由audio、files、graphics、math、physics、scenes、utils這些主要類庫所組成,它們分別對應了 Libgdx中的音頻操作,檔案讀取,2D/3D渲染,Libgdx繪圖相關運算,Box2D封裝,2D/3D遊戲組件(3D部分目前無組件),以及 Libgdx內建工具類。

關於Libgdx中的Gdx類: 

單從表面上看,Gdx類佔用空間不足2KB,甚至不具備一行可以被直接執行的函數,並沒什麼重要好說。

然而,真實的Gdx卻是Libgdx類庫啟動並執行核心所在,沒有它你將寸步難行,不單運行Graphics、Input、Files、Audio、 AndroidApplication等Libgdx關鍵區段所必需的執行個體會在Libgdx初始化時注入Gdx中對應的graphics、input、 files、audio、app等靜態變數裡面,就連Libgdx對OpenGL介面(或OpenGLES,視Libgdx運行平台而定,以下統稱 OpenGL)的GL10、GL11、GL20、GLCommon等封裝類也會在Graphics執行個體化時分別注入到gl10、gl11、gl20、gl 這四個同樣位於Gdx的靜態變數當中(在Graphics中也會繼續保留它們的引用,因此無論你執行Gdx.graphics.getGL10還是 Gdx.gl10,其實都在調用同一個靜態變數)。事實上,如果你想不使用Gdx而正常運行Libgdx,那麼除了重構源碼,就再沒有任何辦法可想了。

PS:如果你不清楚自己究竟在什麼環境使用Libgdx,其實也不必強分gl10或gl11,大可以通過Gdx.gl方式調用Libgdx中對於OpenGL介面的預設封裝(執行某些非多版本共有介面時,依舊需要使用對應版本專屬gl)。

想要使用Libgdx,卻不明白Gdx是幹什麼用的,那麼一切就都是空談。

下面開始,我將具體講解Libgdx中的影像處理與遊戲組件部分:
Mesh:  

本質上講,Libgdx中所有可見的3D物體首先都是一個Mesh(網格,或者說三維網格形式的進階圖元)。Mesh是如何產生的呢。眾所周知,數學上講 的立體幾何由點、線、面三部分組成,無論多麼複雜的映像也可以分解為無數細小的這三部分,或者說可以由非常基礎的N個這三部分所組合而成;到了3D遊戲開 發時,當我們要構建複雜的3D映像,首先會以一系列有序的vertices(頂點)構成這些具體的點、線、三角要素,即構成繪圖基本圖元 (Primitives),再將基本圖元組合成更完整的進階圖元也就是具體3D對象。因此,如果對Mesh概念進行簡單的理解,其實它就是一個象徵完整圖 像的基本圖元集合體,Libgdx先讓我們把一個個細分的vertices組成基本圖元,再由Mesh類將基本圖元製成更加複雜的進階圖元展示出來。

具體可見Libgdx作者提供的returntomarchfeld樣本,基本效果如下圖所示:



Texture: 

Libgdx所提供的遊戲紋理用類,其實質可理解為儲存在顯存中的Image,它以貼圖的方式通過OpenGL將圖片顯示到遊戲介面之上。Libgdx的 紋理可以直接從指定檔案路徑載入,也可以通過它提供的Pixmap類憑空建立(它的Texture(int width, int height, Format format)構造內部直接調用了Pixmap,不是必須在外部產生Pixmap後注入)。另外在載入Texture時,個人建議通過Libgdx提供的 TextureDict.loadTexture函數調用,該方法內部提供了Texture緩衝管理,能夠避免無意義的資源重複載入。此 外,Texture通常會與TextureRegion類配套使用,利用TextureRegion封裝Texture後,再利用SpriteBatch 進行繪製,可以很方便的修訂Texture為我們需要的顯示範圍。還有,Libgdx中Sprite類為TextureRegion子類,因此能夠將 Sprite當作TextureRegion來使用,只是Sprite類比TextureRegion有所擴充。不過Libgdx的 SpriteCache類並沒有繼承Sprite或TextureRegion,所以起不到TextureRegion的作用,只能構建一組靜態貼圖集合 罷了,特此說明。

// Libgdx的Texture與Sprite使用  public class Main extends AndroidApplication {      class TestSprite implements ApplicationListener {          // 準備繪圖用SpriteBatch          SpriteBatch spriteBatch;          // 準備遊戲精靈          Sprite sprite;          // 準備圖片載入用Texture          Texture texture;          public void create() {              // 構建SpriteBatch              spriteBatch = new SpriteBatch();              // 構建Texture,映像寬與高大小都必須為2的整數次冪,否則提示異常              // PS:在Android環境使用Libgdx的internal載入時必須檔案必須位於assets目錄下              texture = new Texture(Gdx.files.internal("mySprite.png"));              // 以指定Texture構建Sprite              sprite = new Sprite(texture);              // 定位到100, 180(Libgdx使用標準笛卡爾座標系,自左下0,0開始)              sprite.setPosition(100, 180);          }          public void render() {              // 清屏              Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);              // 初始化繪圖調用              spriteBatch.begin();              // 繪製精靈到遊戲螢幕              sprite.draw(spriteBatch);              // 結束繪圖調用              spriteBatch.end();          }          public void dispose() {              // 釋放佔用的資源              spriteBatch.dispose();              texture.dispose();          }          public void resume() {          }          public void pause() {          }          public void resize(int width, int height) {          }      }      public void onCreate(Bundle bundle) {          super.onCreate(bundle);          // 初始化遊戲螢幕,並設定是否支援GLES 2.0,如果您對向下相容沒什麼需要選擇true即可(2.1以上),否則選擇false。          initialize(new TestSprite(), true);      }  }  

Pixmap: 

Libgdx所提供的像素級映像渲染用類,由於Libgdx目前以JNI方式內建映像解碼器,所以我們可以直接將Pixmap理解為一個Android中Bitmap的替代者,兩者間實現細節雖有差別,但具體作用卻大同小異。Pixmap支援Alpha、LuminanceAlpha、RGB565、RGBA4444、RGB888、RGBA8888等五種映像彩色模式,支援png、jpg、bmp等三種影像檔的讀取和載入。一般來說,Pixmap必須和Texture混用才能真正顯示畫面。不過在事實上,Libgdx的Texture裡已經內建有Pixmap了。


Libgdx作者部落格:http://www.badlogicgames.com/ 

Libgdx項目地址:http://code.google.com/p/libgdx/ 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.