Как сделать так, чтобы плитка становилась ярче при наведении на нее курсора?

Я создал шестиугольную изометрическую мозаичную карту, используя HexagonalTiledMapRenderer в libGDX и программу Tiled. Карта рендерится корректно, но я не знаю, как получить информацию об отдельных тайлах, и поэтому не знаю, как быть с пользовательским вводом.

Я хочу, чтобы плитка загоралась при наведении на нее (также чтобы что-то о плитке можно было напечатать, например, какая это плитка, то есть лес, река, горы), поэтому я полагаю, что мне понадобится какая-то сетка -подобная система, и я думал, что мне выдаст тайловая карта, но я не могу ее найти/понять.

Немного кода
Основной базовый класс

public class MyGdxGame extends Game {

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

игровой класс

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();
 }
}

Шестиугольная изометрическая мозаичная карта

Пример того, что я хочу с ним сделать

Я хочу иметь возможность, например, сделать одну плитку ярче или краснее, или заставить ее исчезнуть. Поэтому я в основном хочу сделать плитки интерактивными. Я хочу, чтобы программа знала, например, какая плитка находится под курсором. Это все только примеры, надеюсь, вы понимаете, чего я хочу.


person The Coding Wombat    schedule 10.12.2016    source источник
comment
Что вы имеете в виду под светом? Вы хотите иметь какое-то наложение? Данные плитки можно найти, получив свойства плитки.   -  person Jim    schedule 19.12.2016
comment
Я хочу иметь возможность, например, сделать одну плитку ярче или краснее, или заставить ее исчезнуть. Поэтому я в основном хочу сделать плитки интерактивными. Я хочу, чтобы программа знала, например, какая плитка находится под курсором. Это все только примеры, надеюсь, вы понимаете, чего я хочу.   -  person The Coding Wombat    schedule 20.12.2016
comment
Я понимаю что ты имеешь в виду. Это будет более длинное объяснение, но ничего продвинутого. Я сейчас на работе, но сегодня вечером я могу привести пример для вас.   -  person Jim    schedule 20.12.2016
comment
Это может помочь вам stackoverflow.com/questions/24080272/   -  person resw67    schedule 20.12.2016
comment
Спасибо @resw67   -  person The Coding Wombat    schedule 22.12.2016
comment
@IronMonkey ты нашел ответ?   -  person The Coding Wombat    schedule 22.12.2016


Ответы (1)


Это действительно вопрос из 3 частей.

Выбор плитки

У вас есть положение мыши, положение камеры и размер плиток. Если вы переведете положение мыши в соответствии с положением камеры, вы получите координаты мыши на карте. Затем возьмите эти координаты и разделите на размер плитки. Приведите значения x и y к Integer, и у вас будет плитка, над которой зависает мышь.

Подсветка плитки

Самый простой способ — создать полупрозрачный тайл/спрайт и отобразить его над тайлом, на который вы наводите мышь.

Получение свойств плитки:

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, выберите плитку (или несколько плиток) в наборе плиток, щелкните правой кнопкой мыши и выберите «Свойства плитки». В окне свойств в левом нижнем углу вы видите знак плюс. Нажмите на это, и вы можете добавить пользовательское свойство (вы даете ему имя и тип). Свойства, установленные в наборе тайлов, будут перенесены на каждый тайл, который вы поместите на карту тайлов.

Пример: если вы хотите определить тип плитки (дерево, песок, вода и т. д.), вы выбираете плитку и добавляете свойство с именем «TileType» в виде строки. Когда вы нажимаете ok, вы можете указать тип значения. Бывший "Песок".

Затем, когда вам нужен тип выбранной плитки, вы читаете свойство:

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

Таким образом, вы можете установить ряд свойств плитки.

Если вы попытаетесь получить ячейку из тайловой карты из позиции x, y, в которой нет тайла, tileLayer.getCell(x,y) вернет null. Так что не забудьте проверить это.

person Jim    schedule 22.12.2016