突出显示具有透明度的图块

时间:2014-11-28 10:06:01

标签: java libgdx tiled

我正在制作基于平铺地图的回合制策略。我的地图包含两个图层 - 第一个图层始终可见,用作背景,第二个图层用于突出显示图块。突出显示的瓷砖显示玩家可能的移动。目前进展情况如下:

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++; }

在此我使用地图第二层中的一个图块为特定图块创建边框。现在这个瓷砖只有32x32透明瓷砖的2px边框。为了使突出显示消失,我使用类似的for循环,我将tile设置为null。选择/取消选择图块效果很好,但它可能不是最有效的方法。我想将蓝色边框交换成彩色透明盒子,就像运动中的预先战争一样,或者可以在下面看到:

Desired look pic

我尝试在平铺的第二层上制作半透明的瓷砖,但没有运气。如果有可能在特定图块上仅应用半透明颜色,而不使用第二层图块,则可能会很好。所以,我的问题是 - 如何将这些丑陋的边框交换成全彩色(半)透明瓷砖,以达到与上图相似的效果?

1 个答案:

答案 0 :(得分:0)

好......好吧。我不是Tiled的专家。我从来没有真正使用它,但它不支持PNG tilemap导入?在...中制作一个半透明的瓷砖纹理,然后在第二层的地图中使用它,只激活你真正需要的那个?

或者你可以通过编程方式完成。对于需要突出显示的每个图块,只需使用图块的coortinates创建一个新的TextureRegion:

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

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

这样,您可以在需要时加载要在正确位置显示的纹理区域。你甚至可以(如果范围永远不会改变)将它们存储在一个集合中,然后每次移动都将它们的坐标移动一个方向。

这至少是我的方法,对Tiled没有任何了解。

之前我使用过HexagonTile地图,但是我必须编写自己的实现(基于LibGDX)。以下是代码,以防它帮助您进一步理解这个想法:https://github.com/2RSoftworks/interstellarempires/blob/master/IEMaster/IEClient/src/main/de/r2soft/empires/client/maps/hex/R2HexMapRenderer.java#L167

希望这会有所帮助。