好的,我正在 Android 上开发一款游戏。我需要实现像素完美的碰撞检测。我已经在每个图像周围设置了边界框,每个边界框都经过变换以匹配图像的当前旋转。这一切都很好。我还将每个位图的像素数据存储在数组中。有人可以帮我找出检测像素是否重叠的最有效方法吗?预先感谢您的任何帮助!
基本思想是为每个对象创建一个位掩码,在每个像素中指示该对象是否实际存在。然后比较两个对象的位掩码的每个像素。
您可以通过计算两个边界框重叠的矩形区域来最小化需要检查的像素数量。该区域内的像素就是您需要检查的像素。
迭代所有这些像素,并检查像素是否填充在两个对象中。如果其中任何一个是,那么就会发生碰撞。
如果您的矩形与 x/y 轴对齐,要查找重叠,请查找重叠的左侧、右侧、顶部和底部。它看起来像这样(我可能搞砸了边缘情况,还没有尝试过这个):
int left = max(obj1.left, obj2.left)
int right = min(obj1.right, obj2.right)
int top = min(obj1.top, obj2.top)
int bottom = max(obj1.bottom, obj2.bottom)
for (int x = left; x < right; x++) {
for (int y = top; y < bottom; y++) {
if (obj1.isFilled(x,y) && obj2.isFilled(x,y)) {
return true;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)