碰撞就是游戏中的元素是否碰到一起,比如打飞机游戏,没躲避炮弹就算碰撞,要检测出来,要game over的。主要讲讲2D游戏里的碰撞检测,传统的2D游戏可以把不同元素当作基本图形粗糙地来检测碰撞与否?
1、矩形判断
比如把游戏中敌我双方人物都当作矩形来检测两个矩形是否相交。那么如何判读两个矩形是否相交呢?
相交 == !(不相交),不相交较好判断,优先判读不相交再取反就可以了。
如上图旁边矩形都不和中间矩形相交,它们都有共同特点:
旁边矩形(B)的xy坐标没有同时介于中间矩形(A)x~x‘,y~y‘间,即没有一个点出现在A矩形内部,用伪代码判断不相交就是
B.max(x) < A.min(x) || B.min(x) > A.max(x) || B.max(y) < A.min(y) || B.min(y) > A.max(y)
那么判读相交的伪代码就是
!(B.max(x) < A.min(x) || B.min(x) > A.max(x) || B.max(y) < A.min(y) || B.min(y) > A.max(y))
2、圆形判断
圆形判读比较简单,即判断两个圆心距离是否大于两个圆的半径之和
(Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) > r1 + r2)
3、多矩形判断
这时我们就要封装多个矩形来一一判断是否有碰撞。
4、像素碰撞
...
原文:http://www.cnblogs.com/aiguozhe/p/3575812.html