我正在尝试单击图 block 并更改其颜色。到目前为止我有这个:
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
有了它的图 block 坐标(假设我做得正确),我现在想在该图 block 上绘制一个蓝色方 block 。我该怎么做?如果有帮助的话,我的 Assets 文件夹中有 testTile.png
。我使用 batch.draw();
将其他图片绘制到屏幕上。如果需要更多信息,请随时询问。
path
是 TiledMapTileLayer。
最佳答案
我解决这个问题的方法是使用一个自定义类列表来存储需要绘制蓝色方 block 的位置和需要绘制的 Sprite 。 (将 Sprite 存储在列表中将为您提供更多灵 active ) 因此,基本上在渲染方法中,您将通过循环列表来绘制这些图 block 。
示例代码:(想不出比 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 对象的列表中绘制每个 Sprite 。
//Pseudo code inside render after batch.begin();
for(SpriteMap spriteMap : spriteMapList) {
spriteMap.sprite().setPosition(spriteMap.posX, spriteMap.posY);
spriteMap.draw(batch);
}
注意重新使用蓝色框纹理。另外,请确保在绘制 map 后绘制蓝色框,否则它将隐藏在 map 后面。
另一个注意可能需要调整单击的位置 x 和 y,以便将 Sprite 绘制在精确的图 block 上。因此,请相应地更改它。我直接使用了点击中的 X 和 Y,但您可能需要更改它们。
希望有帮助。
关于java - 单击图 block 并在 libGdx 中更改其颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34881673/