将鼠标悬停在图块上时,如何使它变亮?
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 为空。所以记得检查这个。
我使用 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 为空。所以记得检查这个。