首先想到的一个例子是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
这样做的正确方法是什么?