我正在尝试点击图块并更改其颜色。到目前为止,我有这个:
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 :(得分: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,但您可能需要更改它们。
希望有所帮助。