Способ, которым я подхожу к этой проблеме, состоит в том, что у вас есть список пользовательских классов, в которых хранятся местоположения, где должен быть нарисован синий квадрат, и спрайт, который нужно нарисовать. (Сохранение спрайта в списке даст вам больше гибкости) Итак, в основном в вашем методе рендеринга вы нарисуете эти плитки, зациклив список.
Пример код: (не мог бы придумать лучшее название, чем SpriteMap)
public class SpriteMap {
int posX;
int posY;
Sprite sprite;
public SpriteMap(int posX, int posY, Sprite sprite) {
this.posX = posX;
this.posY = posY;
this.sprite = sprite;
}
//ignoring getters
}
Допустим, у вас есть список SpriteMap в своем классе, где вы собираетесь оказывать, а также иметь доступ к списку в isTouched().
List<SpriteMap> spriteMapList = new ArrayList<SpriteMap>();
Теперь внутри isTouched
if(Gdx.input.isTouched()){
Vector3 click = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
camera.unproject(click);
spriteMapList.add(new SpriteMap((int)click.x, (int)click.y, new Sprite(THE_BLUE_BOX_TEXTURE));
}
Теперь в методе визуализации все, что вам нужно сделать, это цикл список и сделать каждую спрайт из списка объектов из SpriteMap.
//Pseudo code inside render after batch.begin();
for(SpriteMap spriteMap : spriteMapList) {
spriteMap.sprite().setPosition(spriteMap.posX, spriteMap.posY);
spriteMap.draw(batch);
}
ПРИМЕЧАНИЕ Повторное использование текстуры синий ящик. Также убедитесь, что вы нарисовали синюю рамку после того, как вы нарисовали карту, иначе она будет скрыта за картой.
ДРУГОЕ ЗАМЕЧАНИЕ Позиции x и y от щелчка, возможно, необходимо отрегулировать, чтобы спрайт был нарисован на точной плитке. Так что измените это соответственно. Я напрямую использовал X и Y из клика, но вам, возможно, придется их изменить.
Надеюсь, что это поможет.