Android StudioとlibGDXでアプリ開発 練習編1

前回の記事でlibGDXの導入ができましたので何回かにわたって開発に必要な知識や便利な機能を紹介していきます。

モジュール構成について

前回作成したプロジェクトを開くとこのような構成になっています。

マルチプラットフォーム向けの開発では主にcoreモジュールに対して実装を行います。
coreモジュールは各プラットフォームで共通の機能となりますので、もしプラットフォームによって機能に差が出る場合はそれぞれのモジュールに実装します。

最初のソースを読む

core/src/com/mygdx/game/MyGdxGame.java

を見るとこのようになっています。
画像を描画するだけの処理が実装されています。

package com.mygdx.game;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    
    @Override
    public void create () {
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
    }
    
    @Override
    public void dispose () {
        batch.dispose();
        img.dispose();
    }
}

ログを仕込んでライフサイクルを知る

libGDXは独自のライフサイクルを持っています。

https://github.com/libgdx/libgdx/wiki/The-life-cycle

ライフサイクルを調べるときは、ログを仕込んで見るのがわかりやすいです。
通常のAndroidアプリ開発であればLog.dなどでログを出力しますがlibGDXのcoreモジュールではLog.dなどAndroidの機能のため使えません。代わりの仕組みが用意されています。

https://github.com/libgdx/libgdx/wiki/Logging

Gdx.app.log("MyTag", "my informative message");
Gdx.app.error("MyTag", "my error message", exception);
Gdx.app.debug("MyTag", "my debug message");

ためしにcreate、render、disposeの各メソッドにログを仕込み、Androidで動かしてみます。
以下のようにソースコードを書き換えてAndroidでアプリを実行します。

    @Override
    public void create () {
        // ログレベルをDEBUGに設定
        Gdx.app.setLogLevel(Logger.DEBUG);
        // ログ出力
        Gdx.app.log("MyTag", "createメソッド");

        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
    }
    @Override
    public void render () {
        // ログ出力
        Gdx.app.log("MyTag", "renderメソッド");

        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
    }
    @Override
    public void dispose () {
        // ログ出力
        Gdx.app.log("MyTag", "disposeメソッド");

        batch.dispose();
        img.dispose();
    }

アプリが起動するとこのようなログが出ます。

logcatにcreateメソッドのログが一度だけ出て、renderメソッドのログが出続けています。

アプリを終了するとrenderメソッドのログが止まり、disposeメソッドのログが一度だけ出ます。

createメソッドでは初期化などを実装し、disposeメソッドは解放処理を実装します。
renderメソッドはメインループになっているので、いろいろなイベントを処理したり、描画を行います。

まとめ

今回はlibGDXのライフサイクルとログの出し方を紹介しました。
ライフサイクルの中には他にもresize、pause、resumeがありますが別の機会で触ってみようと思います。

カテゴリー: Android タグ: , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です