单击一个磁贴并在libGdx中更改其颜色

时间:2016-01-19 16:14:23

标签: java libgdx tile

我正在尝试点击图块并更改其颜色。到目前为止,我有这个:

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。

1 个答案:

答案 0 :(得分:0)

我将解决这个问题的方法是拥有一个自定义类列表,用于存储需要绘制蓝色方块的位置和需要绘制的精灵。 (在列表中存储精灵将为您提供更多灵活性) 因此,基本上在渲染方法中,您将通过循环List来绘制这些图块。

示例代码:(想不出比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,但您可能需要更改它们。

希望有所帮助。