如何绘制出不规则的形状,以便它可以用作一种按钮

时间:2017-10-22 10:37:47

标签: java libgdx

[语言:Java]

我正在尝试将地图图像上的一组国家/地区转换为按钮。

我试图在paint.net上绘制图像。我用不同的颜色绘制每个国家,然后寻找那些rgb,这样我就有每个国家的x,y值,甚至是唯一的标识符(种类)。我当时正在考虑我可以遍历一个有关点的列表,看看我是否点击它们,但这感觉就像死了效率低。

我还要为每个国家添加边界框,但也要将它们添加到内部以便我可以更快地检查碰撞(即这个x,y是否存在于此框中?没有?,继续前进...)

我想到的另一种方法是找出一个国家最小的边界框然后将其存储为2D数组,即

int [][] countryAsPixels = new int [width][height];

然后我可以将图像存储为像

这样的矩阵
0000000000
0000111000
0001111110
1111111111
1110000000
0000000000

所以0将不在该国家,而1将是。 我认为这很好,因为我可以去

public boolean hasHit(int x, int y){
    if(countryAsPixels[x][y] == 1){
        return true;
    }
    return false;
}

没有遍历每个像素。只需一个查询。但现在我必须存储所有这些没有任何意义的0。在记忆方面这是浪费吗。

注意:我的最终目标是将所有这些国家/地区与图表链接在一起,并使用libGDX运行程序。

我还在想我可以将图像拆分到像上面这样的国家/地区,然后使用这些值来分解非限制图像(原始地图图像),然后手动将每个国家/地区构建到地图上。这会比虚拟叠加更好吗?

1 个答案:

答案 0 :(得分:1)

有颜色的想法是好的。但为什么你必须通过列表迭代?您将获得click事件的坐标。并且您将“图像映射”作为表格(2D数组),因此只需收集从click事件获取的特定坐标处的颜色。可能你必须做一些转换协调。

更简单的解决方案是拥有(加载)真实图像而不是保持颜色表。使用LibGDX pixmaps。您可以将图像文件直接加载到像素图中,然后检查特定坐标处的颜色。

通过加载外部图像文件来创建像素图: https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Pixmap.html#Pixmap-com.badlogic.gdx.files.FileHandle-

然后使用getPixel()方法获取像素颜色 https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Pixmap.html#getPixel-int-int-