俄罗斯方块游戏开发教程5:形状碰撞检测(第二部分)

俄罗斯方块游戏开发教程5:形状碰撞检测(第二部分)

本文首发于微信公众号:小蚂蚁教你做游戏。欢迎关注领取更多学习制作游戏的原创教程资料,每天学习一点游戏开发知识。

嗨!大家好,我是小蚂蚁。

今天,让我们继续讨论形状碰撞检测的其余两个部分。

游戏引擎碰撞检测原理_box2d 碰撞提前检测_显卡性能检测初始化引擎失败

两边碰撞

游戏引擎碰撞检测原理_显卡性能检测初始化引擎失败_box2d 碰撞提前检测

如图所示,无论“形状1”向左还是向右移动,只要形状上的任何一个正方形两侧有其他正方形,就会发生“碰撞”,形状就不能再移动了左还是右。移动。

其实两边的碰撞判断和我们上一节讲的向下运动的碰撞判断原理是一样的。向下碰撞检测是每个块下是否有其他块,然后左/右碰撞检测是每个块的左/右是否有其他块。

游戏引擎碰撞检测原理_box2d 碰撞提前检测_显卡性能检测初始化引擎失败

关于什么是计算点游戏动态,如何获取计算点在数据表中的行列位置,以及如何遍历当前图的数据,我们已经在中详细讨论过了,所以我赢了不要在这里重复。总之,我们从计算点的位置开始,依次遍历形状上的每个网格位置。只要左/右任意一个网格的值为1,就证明发生了“碰撞”。

看看方块左右移动的逻辑。

左移处理:

box2d 碰撞提前检测_显卡性能检测初始化引擎失败_游戏引擎碰撞检测原理

左侧碰撞检测:

显卡性能检测初始化引擎失败_游戏引擎碰撞检测原理_box2d 碰撞提前检测

向右移动:

box2d 碰撞提前检测_显卡性能检测初始化引擎失败_游戏引擎碰撞检测原理

右侧碰撞检测:

box2d 碰撞提前检测_游戏引擎碰撞检测原理_显卡性能检测初始化引擎失败

改变形状时发生碰撞

接下来游戏引擎碰撞检测原理,我们来看看最后的碰撞检测:形状切换时的碰撞。

什么是形状切换时的碰撞?请看下图。

游戏引擎碰撞检测原理_box2d 碰撞提前检测_显卡性能检测初始化引擎失败

当“形状 1”从状态 2 切换到状态 3 时,右边的方块将覆盖现有的红色方块,并发生“碰撞”。这种情况在游戏中是不允许的,也就是说,我们需要提前判断要切换的状态是否会与现有的方块“碰撞”,如果是,则不允许当前的形状切换状态。

box2d 碰撞提前检测_游戏引擎碰撞检测原理_显卡性能检测初始化引擎失败

具体的碰撞检测流程如下:

首先获取将要切换的状态的shape数据游戏引擎碰撞检测原理,然后一一查看,只要有数据为1的block位置,数据网格中相同位置的数据就是也是1,证明它发生了碰撞。

这里的碰撞与前面的碰撞基本相同,但有两处不同。首先,用于碰撞检测计算的形状数据是下一个状态的形状数据;二、碰撞检测的位置不是左、右、下,而是当前块的位置。

接下来,我们来看看具体的实现。

首先,为形状创建两个变量,一个用于“当前状态”,一个用于“目标状态”。

box2d 碰撞提前检测_显卡性能检测初始化引擎失败_游戏引擎碰撞检测原理

那么,我们来看看切换状态的block逻辑。

游戏引擎碰撞检测原理_显卡性能检测初始化引擎失败_box2d 碰撞提前检测

最后我们来看看状态碰撞检测块的逻辑。

box2d 碰撞提前检测_游戏引擎碰撞检测原理_显卡性能检测初始化引擎失败

游戏引擎碰撞检测原理_显卡性能检测初始化引擎失败_box2d 碰撞提前检测

切换碰撞检测计算:

box2d 碰撞提前检测_显卡性能检测初始化引擎失败_游戏引擎碰撞检测原理

这里要理解的关键是“预判断”,也就是我们假设形状已经切换到下一个状态,然后用这个状态的数据进行计算和判断。如果发生碰撞,则不允许当前形状切换状态。如果没有碰撞,则允许当前形状切换状态。

其实前面的三个碰撞检测也是“预判”。我们先判断形状下方是否有碰撞,左右碰撞,有碰撞就不能移动,没有碰撞就可以移动。

碰撞检测就像进行演习。如果演习出现问题(碰撞),应立即停止正式行动。如果演习顺利(没有碰撞),就会进行正式的行动。

关于形状碰撞检测的内容很多,所以我分两部分来讲解。这里我只以“形状1”为例进行说明,但是俄罗斯方块游戏中一共有7个形状。对于其他形状,碰撞检测原理相同,个别形状略有不同。 .

碰撞检测的实现方式多种多样,甚至不断变化,但原理是一样的。希望大家能够理解并掌握其中的原理,以便更好地应对变化。

我是一只会做游戏的小蚂蚁,教你怎么做游戏。欢迎关注微信公众号【小蚂蚁教你制作游戏】,领取更多制作游戏的原创教程资料,每天学习一点游戏开发。