1. 程式人生 > >Libgdx Developer's Guide(Libgdx開發者手冊)-4(應用框架)

Libgdx Developer's Guide(Libgdx開發者手冊)-4(應用框架)

Libgdx 允許針對多平臺開發,比如桌面作業系統,Android 或瀏覽器。每個平臺使用不同原理建立應用視窗,處理使用者輸入,處理檔案系統,音訊播放等。

後臺

Libgdx 嘗試使用一組介面來抽象以隱藏這些平臺差異。libgdx所支援的每個平臺,都有一個所謂的後臺實現這些介面。應用開發者不用直接關心這些後臺,相反是針對這些介面程式設計。

Libgdx 目前支援4種後臺:

  • Lwjgl: 建立在 Lightweight Java Gaming Library(輕量java遊戲庫), 這是一個圍繞特定於平臺的視窗工具包的JNI 封裝 , 其中包括OpenGL 和 OpenAL 。該後臺運行於Windows, Linux 和 Mac OS X,需要一個可用的Java執行時環境並安裝了至少支援OpenGL 1.5的顯示卡。
  • Jogl
    : 建立在 Jogl 1.1, 另一個圍繞OpenGL,Swing 和綁定於LWJGL的OpenAL的一個JNI封裝。同樣運行於Windows, Linux 和 Mac OS X。現在更推薦Lwjgl後臺, 因為它更穩定一些,尤其是在全屏應用中。
  • Android: 建立在 Android APIs.
  • HTML5: 建立在 GWT, SoundManager 2 和更新後的 GWT WebGL 和Local Storage 繫結 Quake 2 GWT port.  該後臺將把Java程式碼編譯為純的Javascript程式碼。該後臺產品運行於Chrome, Safari, Firefox 和最新的Opera版本以及其他任何支援WebGL的瀏覽器。因為GWT與Javascript的性質, 使用此後臺時僅有很少限制,請參考
    https://github.com/libgdx/libgdx/tree/master/backends/gdx-backends-gwt/issues.txt

模組

作為核心,libgdx由5個介面組成,這些介面提供與作業系統互動的介面。每個後臺都實現了這些介面。

  • Application: 執行應用程式並通知API客戶端應用層事件,例如 調整視窗。為如內容使用狀況等提供日誌工具與查尋方法。
  • Files: 暴露平臺底層的檔案系統。在自定義檔案處理系統頂層提供一個不同型別檔案位置的抽象(不相容Java的File類)。
  • Input: 向API客戶端通知使用者輸入事件,如:滑鼠,鍵盤,觸控或者加速器。同時支援輪詢與事件驅動處理。
  • Audio: 提供播放音效與流媒體音樂以及直接訪問PCM音訊輸入/輸出裝置。
  • Graphics: 暴露 OpenGL ES 1.x 與2.0 (可用) and 允許查詢/設定視訊模式和類似操作。

啟動類

唯一需要編寫的進行平臺指定的程式碼,就是所謂的啟動類。針對每一個平臺,需要一段程式碼實現化一個由該平臺的後臺提供的應用程式介面的具體實現。對於桌面應用而言如下,使用Lwjgl後臺:


public class DesktopStarter {
   public static void main(String[] argv) {
      LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
      new LwjglApplication(new MyGame(), config);
   }
}

對於Android,相應的啟動類如下:

public class AndroidStarter extends AndroidApplication {
   public void onCreate(Bundle bundle) {
      super.onCreate(bundle);
      AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
      initialize(new MyGame(), config);
   }
}

這兩個啟動類通常存在於不同的專案中,例如桌面和Android專案。Project Setup  頁描述了Eclipse中這些專案的佈局。

真正的應用程式程式碼寫在一個實現了ApplicationListener介面(在上面的例子中的MyGame)的類中。該類的一個例項被傳入每個後臺相應的初始化方法中。接著應用程式在適當的時候呼叫ApplicationListener中的這些方法(seeThe Life-Cycle)。

關於啟動類的詳細內容請檢視Application Configuration

訪問模組

前面描述的模組可以通過Gdx class的靜態域訪問。這實質上是一組全域性變數,它允許訪問libgdx的任何模組。雖然這通常被認為是非常不好的編碼實踐,我們選擇使用這種原理以簡化在傳遞經常使用且在各種場合中的基礎程式碼的引用時所帶來的麻煩。

要訪問如音訊模組時,只需簡單地編寫如下程式碼:

// creates a new AudioDevice to which 16-bit PCM samples can be written
AudioDevice audioDevice = Gdx.audio.newAudioDevice(44100, false);

Gdx.audio 是後臺實現的一個引用,該後臺已經在應用例項啟動時初始化完成。其他模組也使用相同的方式訪問,如 Gdx.app 獲取應用程式,Gdx.files 訪問檔案實現等等。