单击图块并在 libGdx 中更改其颜色

Clicking on a tile and changing its color in 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。

我解决这个问题的方法是有一个自定义列表 class 存储需要绘制蓝色方块的位置和需要绘制的精灵。 (在列表中存储精灵会给你更多的灵活性) 所以基本上在您的渲染方法中,您将通过循环列表来绘制这些图块。

示例代码:(想不出比 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
}

假设您的 class 中有一个 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);
}

注意 Re-use 蓝框纹理。还要确保在绘制地图后绘制蓝色框,否则它会隐藏在地图后面。

另一个注意事项 可能需要调整单击位置的 x 和 y,以便在确切的图块上绘制精灵。所以请相应地改变它。我已经直接使用了来自 click 的 X 和 Y,但您可能需要更改它们。

希望对您有所帮助。