Java 如何绘制出一个不规则的形状,使它可以作为一种按钮

Java 如何绘制出一个不规则的形状,使它可以作为一种按钮,java,libgdx,Java,Libgdx,[语言:Java] 我试图将地图图像上的一组国家变成按钮 我已尝试在paint.net上绘制该图像。我用不同的颜色绘制每个国家,然后寻找那些rgb,这样我就有了每个国家的x、y值,甚至还有一个唯一的标识符(某种)。我在想,我可以反复浏览上面的点列表,看看我是否在点击它们,但这感觉好像效率太低了 我还打算将边界框添加到每个国家,但也将它们添加到内部,以便我可以更快地检查碰撞(即,x、y和是否位于该框内?、否?、继续…) 我想到的另一种方法是找出一个国家的最小边界框,然后将其存储为2D数组,即 in

[语言: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运行程序


我还认为我可以将图像分解为国家,如上面所述,然后使用这些值分解未经处理的图像(原始地图图像),然后手动将每个国家构建到地图上。这会比虚拟叠加更好吗?

有颜色的想法是可以的。但是,为什么您必须遍历列表?您将获得单击事件的坐标。您将把“图像映射”作为一个表(2D数组),所以只需收集从单击事件中获取的特定坐标处的颜色。可能你需要做一些坐标转换

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

要通过加载外部图像文件创建pixmap,请执行以下操作:

然后使用getPixel()方法获取像素颜色

使用
JavaFX
作为一种技术,而不是“libGDX”。使用。作为一个团队,我们已经决定使用libgdx。我想我无法改变它。有些人已经在研究这个问题了。谢谢,这是最好和最差的答案。最好的是因为它很容易解决我的问题,但最糟糕的是因为它带走了所有的乐趣。对不起,我不知道这是一件事。