我正在使用精灵艺术,我需要为碰撞检测器生成一个多边形(顶点数组)。
我有一个getPixel(x, y)
方法可以用来获取像素的颜色。我不需要任何花哨的颜色检测或任何东西,只有纯实像素和透明像素。这是我在大脑开始融化之前开始的:
boolean[] hasColor = new boolean[size];
for (int i = 0; i < size; i++) {
int row;
row = i % width;
if ((pixmap.getPixel(i, row) != 0) || (pixmap.getPixel(row, i) != -256)) {
hasColor[i] = true;
} else {
hasColor[i] = false;
}
}
这应该跟踪哪些像素是空的,哪些不是。但我不知道应该从哪里开始。
是否有可用于帮助的算法或其他内容?有人可以提供意见吗?
答案 0 :(得分:0)
你拥有的是光栅艺术品。
您需要的是矢量轮廓。
从矢量转换为栅格很容易,栅格转换为矢量,而不是那么多。
以下是一个可能的工作流程:
这是另一种方法:
A)假设轮廓看起来像六边形,如下所示:
*****
* *
* *
* *
* *
* *
*****
B)将“拟合”定义为轮廓的优点,通过检查六边形内部像素的百分比来计算(不必是上面所示的规则形状的图形)。 C)改变顶点的位置,直到找到最佳拟合(或直到你累了)。
步骤(C)当然是最难的。另外,如果您的精灵需要更多顶点,您可能需要从八角形/ n-gon开始。