今日のlibGDX(20150508):com.badlogic.gdx.graphics.g2d.Sprite

今日のlibGDX目次

http://snoopopo.hatenablog.com/entry/2015/04/27/220545

今日のテーマ:com.badlogic.gdx.graphics.g2d.Sprite

qiita.com

今回もこちら↑の記事を参考に。

そもそもなのでおさらい

上の参考にさせて頂いている記事で、言ってることは

1ファイル丸ごと読み込むのと、テクスチャアトラスで1ファイルの部分を使うのとで、 コードの書き方が違う、でもそれを意識しないように間にSpriteクラスが入って、書きかたを統一できるということだと思う.

というわけで期間も開いてしまったし、今までやったことなのでおさらい.

・1ファイル1テクスチャの書きかた

   //読込
    @Override
    public void create() {
        batch = new SpriteBatch();
        texture = new Texture("img\\snoopopo-.png");
        texture2 = new Texture("img\\kinchan_left.gif");
    }

    //描画
    @Override
    public void render() {
        batch.begin();
        batch.draw(texture, 150, 200);
        batch.draw(texture2, 100, 150);
        batch.end();
    }

・テクスチャアトラスを使った書きかた

   //読込
    @Override
    public void create() {
        batch = new SpriteBatch();
        FileHandle handle = Gdx.files.internal("img\\textureAtlasSample.txt");
        atlas = new TextureAtlas(handle);
    }

    //描画
    @Override
    public void render() {
        batch.begin();
        TextureAtlas.AtlasRegion region = atlas.findRegion("CC_M_aruka1");
        batch.end();
    }

読み込み方も描画の仕方もことなってる.

com.badlogic.gdx.graphics.g2d.Spriteを使う

・読込

   @Override
    public void create() {
        batch = new SpriteBatch();

        //1ファイル丸ごと読み込む
        Texture texture = new Texture("img\\snoopopo-.png");
        sp1 = new Sprite(texture);
        sp1.setPosition(0, 0);

        //テクスチャアトラス
        FileHandle handle = Gdx.files.internal("img\\textureAtlasSample.txt");
        TextureAtlas atlas = new TextureAtlas(handle);
        TextureAtlas.AtlasRegion region1 = atlas.findRegion("CC_M_aruka1");
        sp2 = new Sprite(region1);
        sp2.setPosition(0, 100);
    }

生成したTextureのオブジェクトも、TextureAtlas.AtralRegionオブジェクトもSpriteのコンストラクタに渡してあげると、 その違いを吸収できる.

   public Sprite(Texture texture) {

と、

   public Sprite(TextureRegion region) {

TextureAtlas.AtralRegion は, com.badlogic.gdx.graphics.g2d.TextureRegion の子クラスでした.

Spriteのインスタンスごとに、拡大したり斜めにする情報を保持しているので、その設定単位でSpriteインスタンスを作るかんじか.(画像ごとでもチップ毎でもない)

・描画

   @Override
    public void render() {
        Gdx.gl.glClearColor(0, 0, 0.2f, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        batch.begin();
        sp1.draw(batch);
        sp2.draw(batch);
        batch.end();
    }

どちらの方法で画像を読み込んでも、 public void draw(Batch batch) を呼ぶだけのシンプルな形になった.