2016-01-19 4 views
1

Я пытаюсь щелкнуть по плитке и изменить ее цвет. До сих пор у меня есть это:Нажав на плитку и изменив ее цвет в libGdx

if(Gdx.input.isTouched()){ 
      Vector3 click = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); 
      camera.unproject(click); 
      Cell clicked = path.getCell((int)click.x, (int)click.y); 
      clicked.getTile(); 
    } 

После clicked имеет свои координаты плитки (предполагая, что я сделал это правильно) Теперь я хочу, чтобы нарисовать синий квадрат на этой плитке. Как мне это сделать? У меня есть testTile.png в папке с моими активами, если это помогает. Я нарисовал другие изображения на экране, используя batch.draw();. Если больше информации не требуется, не стесняйтесь спрашивать.

path является TiledMapTileLayer.

ответ

0

Способ, которым я подхожу к этой проблеме, состоит в том, что у вас есть список пользовательских классов, в которых хранятся местоположения, где должен быть нарисован синий квадрат, и спрайт, который нужно нарисовать. (Сохранение спрайта в списке даст вам больше гибкости) Итак, в основном в вашем методе рендеринга вы нарисуете эти плитки, зациклив список.

Пример код: (не мог бы придумать лучшее название, чем 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 из клика, но вам, возможно, придется их изменить.

Надеюсь, что это поможет.