caw*_*caw 2 android 2d collision-detection
在Android中,我使用SurfaceView来显示简单的2D游戏.带有 alpha(表示游戏对象)的位图(.png)在画布上绘制.
现在我想做一个简单但准确的碰撞检测.检查这些位图是否重叠非常容易.
但是,当这些位图具有透明区域时,如何检查碰撞?我的挑战是检测两个球是否碰撞.它们在宽度和高度上填充整个位图,但在所有四个边缘中,当然都有透明区域,因为它是正方形中的圆形.
只有当球真正碰撞而不是周围的位图框时,检测碰撞的最简单方法是什么?
我是否必须在球的轮廓上尽可能多地存储坐标?或者Android在检查碰撞时能否"忽略"alpha通道?
Dhe*_*.S. 11
我能想到的另一种方法是使用可以使用Path构造的简单对象.
一旦有两个对象的边界由路径表示,您可以尝试这样做:
Path path1 = new Path();
path1.addCircle(10, 10, 4, Path.Direction.CW);
Path path2 = new Path();
path2.addCircle(15, 15, 8, Path.Direction.CW);
Region region1 = new Region();
region1.setPath(path1, clip);
Region region2 = new Region();
region2.setPath(path2, clip);
if (!region1.quickReject(region2) && region1.op(region2, Region.Op.INTERSECT)) {
// Collision!
}
Run Code Online (Sandbox Code Playgroud)
将对象作为路径后,可以使用drawPath()直接绘制它们.您还可以通过transform()路径执行移动.
如果是球碰撞,你可以进行分析碰撞检测 - 它会比每像素检测快得多.你只需要有两个球的中心(x1,y1)和(x2,y2)和半径r1用于第一个球,r2用于第二个球.现在,如果球的中心之间的距离小于或等于半径的总和,那么球就会碰撞:
colide = sqrt((x1-x2)^2+(y1-y2)^2)<=r1+r2
Run Code Online (Sandbox Code Playgroud)
但更快一点的方法是比较这个值的平方:
colide = (x1-x2)^2+(y1-y2)^2<=(r1+r2)^2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7161 次 |
| 最近记录: |