前回の記事ではlibGDXのライフサイクルとログの出し方を紹介しました。
今回は描画に関する機能を紹介します。
画像を表示する
サンプルコードを参考に解説していきます。
core\src\com\mygdx\game\MyGdxGame.java
SpriteBatch batch; Texture img; @Override public void create () { // SpriteBatchを初期化 batch = new SpriteBatch(); // Textureにはbadlogic.jpgファイルを指定して初期化 img = new Texture("badlogic.jpg"); } @Override public void render () { // 画面を赤で初期化 // 引数は(Red, Green, Blue, Alpha)です Gdx.gl.glClearColor(1, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // 下記のように記述することも可能です // Gdx.gl.glClearColor(0xff, 0x00, 0x00, 0xff); // Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // 描画処理開始 batch.begin(); // 座標x=0、Y=0に画像を描画 batch.draw(img, 0, 0); // 描画処理終了 batch.end(); } @Override public void dispose () { // SpriteBatchを解放 batch.dispose(); // Textureを解放 img.dispose(); }
SpriteBatchは描画に必要なクラスです。
SpriteBatchのbeginからendまでに行われた処理が実際の画面に反映されます。
サンプルコードをビルドして実行すると真っ赤な画面に画像が表示されています。
またlibGDXでは特定のクラスを扱った場合はdisposeメソッドにて手動で解放処理を行う必要があります。
もし解放処理を行わないとメモリリークが発生します。
以下のページにメモリ管理に関する詳細が記載されています。
https://github.com/libgdx/libgdx/wiki/Memory-management
座標を変更する
libGDXの原点座標(0, 0)は左下になります。Xは右側、Yは上側の方向に伸びます。
ためしにbatch.drawの引数を以下のように変更してビルド、実行すると表示されるX軸の位置がランダムに変化します。
// 座標x=0から100の間、Y=0に画像を描画 batch.draw(img, MathUtils.random(100), 0);
描画頻度を手動に切り替える
libGDXはデフォルトで、常に継続してrenderメソッドが呼ばれている状態です。
アクションゲームなどの変化が激しい場合は良いですが、画面にあまり変化のないゲームでは過剰な描画です。
そのためボタンを押したときなどイベントをきっかけに描画したほうが電池消耗を抑えることができます。
以下のページに描画頻度の切り替えに関する記載があります。
https://github.com/libgdx/libgdx/wiki/Continuous-%26-non-continuous-rendering
createメソッドに下記のコードを実装することで描画頻度を手動に切り替えるすることができます。
元に戻す場合はfalseをtrueに設定します。
Gdx.graphics.setContinuousRendering(false);
手動で描画を実行する場合は下記のコードを実装します。
このコードが実行されるとrenderメソッドが呼ばれます。
Gdx.graphics.requestRendering();
まとめ
今回は画像の描画と座標に関して紹介しました。
描画はたくさんの機能があるので今後も取り上げていきます。