AndEngine スプライトを表示する

「困ったらネコを出せ」

AndEngine勉強中。

AndEngineExamplesのコードを読み始めました。

前回、空っぽのアプリを作ったので、それをベースに画像(スプライト)を表示します。

blue_cat.png

表示する画像は何でも良かったのですが、「困ったらネコを出せ」とゴースト的な何かが囁くのでネコを描きました。ネコに見えない?勘弁してよ。

高さと幅は64ピクセルの正方形画像です。このファイルは、以下のパスに入れておきます。

/assets/gfx/blue_cat.png

実行結果

画面サイズ480×800のNexus Sのエミュレータです。 画面中止よりやや右下にズレて表示されていますが、これについては後で説明します。

CatFaceSpriteActivity-345x400.png

コードの解説

package com.ivoryworks.android.andenginegarage.sprite;  
  
import org.andengine.engine.camera.Camera;  
import org.andengine.engine.options.EngineOptions;  
import org.andengine.engine.options.ScreenOrientation;  
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;  
import org.andengine.entity.scene.Scene;  
import org.andengine.entity.scene.background.Background;  
import org.andengine.entity.sprite.Sprite;  
import org.andengine.entity.util.FPSLogger;  
import org.andengine.opengl.texture.TextureOptions;  
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;  
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;  
import org.andengine.opengl.texture.region.TextureRegion;  
import org.andengine.ui.activity.SimpleBaseGameActivity;  
  
public class CatFaceSpriteActivity extends SimpleBaseGameActivity {  
    private static final int CAMERA_WIDTH = 480;  
    private static final int CAMERA_HEIGHT = 720;  
    private static final String ASSET_BASE_PATH = "gfx/";  
    private static final String IMAGE_FILE_NAME = "blue_cat.png";  
  
    private BitmapTextureAtlas mBitmapTextureAtlas;  
    private TextureRegion mBlueCatTextureRegion;  
  
    @Override  
    public EngineOptions onCreateEngineOptions() {  
        final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);  
        return new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED,  
                new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);  
    }  
  
    @Override  
    protected void onCreateResources() {  
        BitmapTextureAtlasTextureRegionFactory  
                .setAssetBasePath(ASSET_BASE_PATH);  
        mBitmapTextureAtlas = new BitmapTextureAtlas(getTextureManager(), 64, 64,  
                TextureOptions.BILINEAR);  
        mBlueCatTextureRegion = BitmapTextureAtlasTextureRegionFactory  
                .createFromAsset(mBitmapTextureAtlas, this, IMAGE_FILE_NAME, 0, 0);  
        mBitmapTextureAtlas.load();  
    }  
  
    @Override  
    protected Scene onCreateScene() {  
        final Scene scene = new Scene();  
        scene.setBackground(new Background(0.75f, 0.75f, 0.75f));  
        Sprite sp = new Sprite(CAMERA_WIDTH/2, CAMERA_HEIGHT/2,   
                mBlueCatTextureRegion, getVertexBufferObjectManager());  
        scene.attachChild(sp);  
        return scene;  
    }  
}

CatFaceSpriteActivity クラス

前回作ったMainActivityの名前を変えました。 スプライトの格納先 ASSET_BASE_PATH と ファイル名 IMAGE_FILE_NAME を追加で定義しています。

onCreateEngineOptions()

描画領域の設定を行います。前回から特に変更ありません。

onCreateResources()

スプライトを読み込みます。

  • Line:35 スプライトの保存位置を設定しています。
  • Line:37 読込用のバッファを定義しています。第2, 3パラメータにてバッファのサイズを与えていますが、以下を守るよう使用してください。
    • 読み込む画像サイズと同じかそれ以上のサイズとする
    • 2のべき乗数とする。as
  • Line:37 ファイル名を指定して読み込むスプライトを設定します。
  • Line:41 設定したスプライトを読み込みます(描画はまだ)。

onCreateScene()

描画します。 前回は背景色を定義しただけでしたが、スプライトの描画処理を付け加えています。

  • Line:48 第1、2パラメータでスプライトを描画する起点座標を与え、スプライトオブジェクトを生成しています。スプライトの左上の点(x:0, y:0)がこの起点とマッチします。 今回は単純に高さと幅を2で割った値(中点)としています。このためスプライトが中点より右下寄りに表示されています(正確には、x軸y軸共に32ピクセル分ずれています)。
  • Line:50 生成したスプライトを、Sceneに追加しています。

おわり

各種メソッドの使い方についてまだ深くわかっていない点があります。勉強を続けます。 次回はネコを動かします。ムービングネコです。