2014-11-28 3 views
0

Я использую стратегию, основанную на черепичной карте. Моя карта состоит из двух слоев: первая из них видима все время и используется в качестве фона, вторая - для выделения фрагментов. Выделенные плитки показывают возможное движение для игрока. На данный момент прогресс выглядит следующим образом:Подсветка плитки с прозрачностью

My border boxes pic

Чтобы сделать выделение можно ли использовать этот цикл:

for(int s = 0;s<7;){ for (int i = 0;i<7;i++) { if ((inField(clickx + i,clicky + s)) && !(tileWithPlayer(clickx + i,clicky + s))) { highlight_layer.getCell(clickx + i, clicky+s).setTile(mark); } } s++; }

В этом я использую одну плитку из второго слоя карты к сделайте границу для определенных фрагментов. На данный момент эта плитка имеет только 2px границу прозрачной плитки 32x32. Чтобы исчезнуть подсветка, я использую аналогичные для цикла, где я устанавливаю плитку в нуль. Выбор/отмена выбора плитки отлично работает, но, вероятно, это не самый эффективный способ сделать это. Я хотел бы обменять синие пограничные ящики в цветные прозрачные окна, что-то вроде заранее войн во время движения, или, как это можно увидеть ниже:

Desired look pic

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

ответ

0

Ну ... ладно. Я не специалист в Tiled. Я никогда не работал с этим много, но разве он не поддерживает PNG tilemap import? Как в ... сделать текстуру плитки полупрозрачной, а затем использовать ее на вашей карте на втором уровне и активировать только те, которые вам действительно нужны?

В качестве альтернативы вы можете сделать это программно. Где для каждой плитки, что вам нужно, чтобы выделить просто создать новый TextureRegion с coortinates вашей плитки:

float x = tileWidth * col; 
    float y = tileHight * row; 

    final TextureRegion region = Assets.getRegion(...); 

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

Это был бы по крайней мере мой подход, не зная ничего о плиточном.

Раньше я использовал карту HexagonTile, однако мне пришлось написать свою собственную реализацию (на основе LibGDX). Вот код, если это поможет вам понять идею: https://github.com/2RSoftworks/interstellarempires/blob/master/IEMaster/IEClient/src/main/de/r2soft/empires/client/maps/hex/R2HexMapRenderer.java#L167

Надеюсь, это помогло.

+0

Я использую этот способ прямо сейчас, чтобы показать сетку. Однако это решение не самое лучшее, так как я должен сначала нарисовать фрагмент, а затем назначить его TiledMapTile, а затем установить значение null. mark = highlight_layer.getCell (0, 1) .getTile(); highlight_layer.getCell (0, 1) .setTile (null); он отлично работает, но выглядит грязным в коде :) Я попробую TextureRegion. Я как-то пропустил существование этого класса :) –