The application framework - garsue/libgdx GitHub Wiki

モジュール

libgdxのコアはオペレーティングシステムとやりとりするための5つのインターフェイスから構成されています. 各バックエンドがこれらのインターフェイスを実装しています.

  • Application: アプリケーションを実行し, APIクライアントにウィンドウのリサイズなどのアプリケーションの状態を伝達します. ログ機能やメモリ使用量の取得といった機能も提供しています.
  • Files: プラットフォームのファイルシステムにアクセスします. 独自の(JavaのFileクラスと相互運用できない)ファイル操作システム上でファイルロケーションの異なるタイプを抽象化して提供しています.
  • Input: APIクライアントにマウス, キーボード, タッチからの入力や加速度センサのイベントなどを通知します. ポーリングとイベント駆動処理のいずれもサポートされています.
  • *Net**: クロスプラットフォームで使えるHTTP/HTTPs経由のリソースへのアクセス方法を提供しています. それだけでなくTCPサーバとクライアントのソケットも提供しています.
  • Audio: 効果音の再生と音楽のストリーミング方法を提供しています. くわえてPCMオーディオ入出力のためにオーディオデバイスに直接アクセスする方法も提供しています.
  • Graphics: (利用できるなら)OpenGL ES 2.0 を提供しています. ビデオモードなどの取得/設定もできます.

スタータクラス

どうしても書かなければならない特定のプラットフォーム向けのコードは, スタータクラスと呼ばれています. 対象となる各プラットフォーム向けに, そのプラットフォーム向けのバックエンド使ってアプリケーションインターフェイスの具体的な実装を行います. デスクトップ向けならLwjglバックエンドを使ったこのようなコードになるでしょう.

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

アンドロイド向けならスタータクラスに相当するクラスは以下のようになるでしょう.

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

これら2つのクラスはdesktopプロジェクトとAndroidプロジェクトのように異なるプロジェクトに配置されます. Eclipse向けのこれらのプロジェクトのレイアウトについて プロジェクトのセットアップ, 実行, デバッグ, パッケージング のページで解説しています.

アプリケーションの実質的なコードは ApplicationListener インターフェイスを実装したクラス(上記の例だとMyGame)に書きます. このクラスのインスタンスは各バックエンドのアプリケーション実装(上記を参照)のそれぞれの初期化メソッドに渡されます. アプリケーションは適切なタイミングで ApplicationListener のメソッドを呼び出します(ライフサイクル を参照してください).

スタータクラスの詳細については スタータクラスと設定 を参照してください.

モジュールへのアクセス

前述したモジュールにはGdx classのstaticフィールドを通じてアクセスできます. これらのフィールドはlibgdxのあらゆるモジュールから簡単にアクセスできるグローバル変数のようなものです. 一般的にはとても悪いコーディング手法ですが, あらゆる場所から頻繁に使われるこれらのモジュールに簡単にアクセスできるようにするためにこのメカニズムを採用しました.

例えばオーディオモジュールにアクセする場合は単純に以下のように書くことができます.

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

audio is a reference to the backend implementation that has been instantiated on application startup by the Application instance. Other modules are accessed in the same fashion, e.g. Gdx.app to get the Application, Gdx.files to access the Files implementation and so Gdx.audio はアプリケーション起動時にインスタンス化されたバックエンドの実装を参照しています. 他のモジュールも同様のやり方でアクセスできます. 例えば Gdx.app でアプリケーションに, Gdx.files でFilesの実装にアクセスできる, といった具合です.