将鼠标悬停在图块上时,如何使它变亮?

How do I make a tile become brighter upon hovering over it?

我使用 libGDX 中的 HexagonalTiledMapRenderer 和 Tiled 程序创建了一个六角形等距平铺地图。地图呈现正确,但我不知道如何访问有关各个图块的信息,因此我不知道如何处理用户输入。

我想要的是让一个方块在悬停在它上面时亮起(还可以打印关于方块的一些东西,比如它是什么方块,即森林、河流、山脉),所以我想我会需要某种类似网格的系统,我认为平铺地图会提供给我,但我找不到 it/understand。

一些代码
主核class

public class MyGdxGame extends Game {

 @Override
 public void create () {
    setScreen(new Play());
 }
}

播放class

public class Play implements Screen {

 private TiledMap map, hexMap;
 private HexagonalTiledMapRenderer hexRenderer;
 private OrthographicCamera camera;

 @Override
 public void show() {
    hexMap = new TmxMapLoader().load("hexTiledMap.tmx");
    System.out.println(hexMap.getProperties().getKeys());
    hexRenderer = new HexagonalTiledMapRenderer(hexMap);

    camera = new OrthographicCamera();
    camera.setToOrtho(false);
 }

 @Override
 public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    hexRenderer.setView(camera);
    hexRenderer.render();
 }

 @Override
 public void resize(int width, int height) {
    camera.viewportWidth = width;
    camera.viewportHeight = height;
    camera.update();
 }
}

我想用它做什么的例子

例如,我希望能够只使一块瓷砖更亮、更红或让它消失。所以我基本上想让瓷砖互动。我想让程序知道,例如,光标下的图块是什么。这些都是例子,希望你明白我的意思。

这真的是一个由 3 部分组成的问题。

选择一个图块

你有你的鼠标位置,你的相机位置和方块的大小。 如果根据相机位置平移鼠标位置,您将获得地图的鼠标坐标。 然后获取这些坐标并根据图块大小进行划分。将 x 和 y 值转换为整数,鼠标悬停在图块上。

点亮一个方块

一种简单的方法是使用半透明 tile/sprite 并将其显示在鼠标悬停的图块上方。

获取图块的属性:

TiledMap map;
TiledMapTileLayer tileLayer;

//define the layer where you select the tile
tileLayer = (TiledMapTileLayer) map.getLayers().get("layername");

//get the tile that you want
Cell cell = tileLayer.getCell(x,y);
TiledMapTile tile = cell.getTile();

//this is where you get the properties of the tile
tile.getProperties().get("propertiename");

您在 Tiled 中定义属性的方式是 select 在 tileset 中设置一个 tile(或多个 tile),右键单击并 select "Tile properties"。在属性 window 的左下角,您会看到一个加号。单击此按钮,您可以添加自定义 属性(您可以为其指定名称和类型)。 tileset 中设置的属性将转移到您在 tilemap 中放置的每个 tile。

例如:如果您想定义瓷砖的类型(树、沙子、水等),您可以 select 瓷砖并添加名称 "TileType" 的属性作为字符串。当你按下 ok 时,你可以给类型一个值。例如 "Sand".

然后,当您想要 selected 磁贴的类型时,您会阅读 属性:

String tileType = tile.getProperties().get("TileType");

通过这种方式,您可以在图块上设置多个属性。

如果您尝试从没有图块的 x,y 位置获取图块地图中的单元格,tileLayer.getCell(x,y) 将 return 为空。所以记得检查这个。