前回の記事で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がありますが別の機会で触ってみようと思います。