Java LibGDX - 多次绘制精灵或创建一个新的精灵?

时间:2014-11-02 19:01:54

标签: java libgdx 2d sprite

首先想到的一个例子是Tic-Tac-Toe。 X和O是不止一次绘制的,或者是使用相同精灵作为地面,沙子或天空的侧卷轴。另一个例子是使用相同精灵的两个玩家/演员/怪物。

我想要做的是找到一种比这样做更好的方法:

//TheGame.java

//Load textures...

ArrayList<Sprite> sprites;
sprites = new ArrayList<Sprite>();

//add sprites to array

batch.begin();
    sprites.get(0).setPosition(0, 0);
    sprites.get(0).draw(batch);
    sprites.get(1).setPosition(0, 0);
    sprites.get(1).draw(batch);
    sprites.get(2).setPosition(200, 0);
    sprites.get(2).draw(batch);
    sprites.get(1).setPosition(400, 0);
    sprites.get(1).draw(batch);
    sprites.get(2).setPosition(200, 200);
    sprites.get(2).draw(batch);
batch.end();

我不想在这里设置职位。我确实这样做但不是这样。

所以我想的是这样的事情:

//Util.java

static class SpriteIndex{
    public int index, x, y;

    public SpriteIndex(int index, int x, int y){
        this.index = index;
        this.x = x;
        this.y = y;
    }
}

然后把它放在一个像队列一样的数组中(我实际上并没有使用队列):

    //TheGame.java

    ArrayList<Sprite> sprites;
    sprites = new ArrayList<Sprite>();

    ArrayList<SpriteIndex> index;
    index = new ArrayList<SpriteIndex>();

    index.add(new SpriteIndex(0, 0, 0));
    index.add(new SpriteIndex(1, 0, 0));
    index.add(new SpriteIndex(2, 200, 0));
    index.add(new SpriteIndex(1, 400, 0));
    index.add(new SpriteIndex(2, 200, 200));

    sprites.addAll(Util.Load(filenames, 3));
}

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

    batch.begin();
    for(int i = 0; i < index.size(); i++){
        sprites.get(index.get(i).index).setPosition(index.get(i).x, index.get(i).y);
        sprites.get(index.get(i).index).draw(batch);
    }
    batch.end();
}

现在我可以在输入处理程序中添加到队列中。

如果以这种方式完成,你可以为每一层建立一个队列:

backGround
midGround
foreGround
fog
overLay

这样做的正确方法是什么?

0 个答案:

没有答案