在Android中,我使用SurfaceView显示一个简单的2D游戏。位图(.png) 带有 alpha (代表游戏对象)被绘制在画布上。
现在,我想做一个简单但准确的碰撞检测。检查这些位图是否重叠相当容易。
但是,当这些位图具有透明区域时,如何检查碰撞呢?我的挑战在于检测两个球是否发生碰撞。它们在宽度和高度上都充满了整个位图,但在所有四个边缘上,肯定存在透明区域,因为这是一个圆在正方形中。
有什么最简单的方法可以只在球真正碰撞时检测到碰撞,而不是它们周围的位图框?
我需要存储尽可能多的点的坐标在球的轮廓上吗?或者Android可以在检查碰撞时“忽略”alpha通道吗?
现在,我想做一个简单但准确的碰撞检测。检查这些位图是否重叠相当容易。
但是,当这些位图具有透明区域时,如何检查碰撞呢?我的挑战在于检测两个球是否发生碰撞。它们在宽度和高度上都充满了整个位图,但在所有四个边缘上,肯定存在透明区域,因为这是一个圆在正方形中。
有什么最简单的方法可以只在球真正碰撞时检测到碰撞,而不是它们周围的位图框?
我需要存储尽可能多的点的坐标在球的轮廓上吗?或者Android可以在检查碰撞时“忽略”alpha通道吗?
clip
可能是什么…… - cawRegion clip = new Region(0, 0, layoutWidth, layoutHeight);
其中,布局宽度和高度可以是您的画布、活动或其他内容的大小。 - Steven McConnonsetPath
可能会返回false
,表示生成的区域为空。在这种情况下,以下检查不起作用,原因显而易见。 - Nicolai Weitkemper