写在前面
嗯...打算开始每天写点啥了,不知道能坚持多久。
准备以一周为单位来进行更新,周一~周三写一些图形方面的内容,四~六是和图形没有什么太大关联的内容(意会就好),周日作为一个更新重点试着写一些乱七八糟的东西。
那么就这样开始更新了w~
在现今的游戏中,碰撞检测可以说是一个基础的不能再基础的技术。它关乎能否正确判断玩家的攻击有没有击中目标,判断玩家有没有踩在地板上,判断某两个物体有没有碰撞在一起,进而衍生出其它的各种行为。
而碰撞检测是建立在碰撞体上的。碰撞体是对一个物体“边界”的确切描述,它描述了每个需要进行碰撞检测的物体的边界,并依靠数学方法判断这些边界是否相交,进而产生碰撞检测的结果。
(“老鹰用爪子抓到了兔子”)
如上图所示,代表老鹰爪子的两个蓝色圆和代表兔子的淡黄色圆“相交”了,由此我们判定鹰抓到了兔子,进行一系列的后续操作。在这个过程中,我们不在意鹰的爪子具体是什么样子的,而只在意它的边界在哪里。在这个例子中,边界就是一个单纯的圆形。
在电子游戏发展早期,碰撞体和实际的轮廓之间还存在着巨大的差异,只是能够概括其大概的边界而已。尽管现在我们有许多丰富的手段来让我们的碰撞体尽可能的接近真实的外形,但多数情况下并不会这么做——归根结底,这么做没给游戏的真实程度带来什么太大的提升,反而还糟蹋了游戏的运行速度。
那让我们从一个最基本的开始吧。
1)圆形碰撞体
圆形碰撞体可以说是最简单的一种碰撞体,其计算速度也是最快的,算法也非常容易理解。
回想一下初中数学中关于两圆“相交”的定义:两圆圆心的距离大于半径和,我们就可以按照它来判断两圆是否相交。