首页 > 网络 > 网络热点

从零开始做一个俄罗斯方块游戏4:形状碰撞检测(上)

常驻编辑 网络热点 2022-08-10 形状   游戏   方块   边界   下落   表格   位置   东西   发生   数据
vaD拜客生活常识网

现在,我们重新再描述一下碰撞检测的过程:vaD拜客生活常识网

依次查看当前形状上的每一个方块,如果发现有任何一个方块下方的位置是 1,那就意味着当前形状与已堆叠的方块发生了碰撞。vaD拜客生活常识网

接下来,我们就来实现这个碰撞检测的过程。vaD拜客生活常识网

vaD拜客生活常识网

如图,是“形状1”在 4 种不同状态下所对应的数据表格。如果,我们能够知道形状上的每一个方块在整个数据表格中的位置(行列号),那么,就能够依次地判断出下方的位置是否有 1 了。vaD拜客生活常识网

在进行遍历的时候,我们一般都是习惯于从左往右,从上往下。所以,这里我们可以将左下方的位置当作遍历的起点。vaD拜客生活常识网

vaD拜客生活常识网

如图,我们把红色的点叫做计算点,坐标轴的中心是当前形状的位置(x0,y0),根据图片可以很直观的看出来不同状态下的计算点的位置。vaD拜客生活常识网

这里算出的计算点的位置是在游戏坐标空间中的位置,还需要将它们进行一次转换,因为我们需要知道的是计算点在数据表格中的哪一行哪一列。vaD拜客生活常识网

vaD拜客生活常识网

计算公式在这里了,已经讲过很多次了(所有的消除游戏里都会用到),就不在解释了。总之,我们能够获取到计算点在数据表格中的哪一行哪一列。vaD拜客生活常识网

vaD拜客生活常识网

在得到了计算点的行列号之后,接下里就只需要以计算点为起点,依次查看每一个格子下方的数值,只要有任何一个格子下方的数值为 1,就证明发生碰撞。vaD拜客生活常识网

上方举的是“形状1”的例子,俄罗斯方块中一共有 7 种“形状”,按照其包围矩形的形状可以分为 3 种类型。vaD拜客生活常识网

vaD拜客生活常识网

形状 1 5 是一种类型(2x3),形状6是一种类型(1x4),形状7是一种类型(2x2)。vaD拜客生活常识网

不同的类型又对应着不同的计算点位置。vaD拜客生活常识网

vaD拜客生活常识网

好了,以上就是理论基础了,接下来我们来看一下具体实现的积木逻辑。vaD拜客生活常识网

首先,我们创建一个全局的表格变量,叫做“网格数据”,作用于整个俄罗斯方块游戏。0 表示没有方块,1表示有方块。vaD拜客生活常识网

vaD拜客生活常识网

接着,我们为“形状1”创建 4 个表格数据,对应的就是它的四个状态。vaD拜客生活常识网

vaD拜客生活常识网

然后,根据形状状态在表格中添上对应的数据,有方块的位置是 1 ,没有方块的位置是 0。vaD拜客生活常识网

vaD拜客生活常识网

接着,来看一下积木逻辑。vaD拜客生活常识网

vaD拜客生活常识网

vaD拜客生活常识网

最后,看一下碰撞检测函数中的积木逻辑。vaD拜客生活常识网

vaD拜客生活常识网

这里比较难以理解的地方是同时对两个表格(一个全局数据表格,一个形状数据表格)进行遍历检查。我习惯于先在纸上画出来,进行推演。如果能够在纸上推演出整个过程话,使用程序来实现这个过程就会简单很多。vaD拜客生活常识网

今天的内容就到这里了,稍微总结一下:我们了解形状碰撞检测中的两种情况,第一种“下边界的碰撞”,比较简单,第二种“下落的碰撞”,相对比较复杂,需要借助我们反复讲过许多次的数据抽象,利用数据来进行碰撞的检测。vaD拜客生活常识网

如果你对于消除游戏中的数据抽象化还不是很理解的话,借着这次机会可以好好研究一下。vaD拜客生活常识网

有些东西是值得花时间深究的,因为它们有着以一当百的效果,搞定了一个就相当于搞定了一百个,数据抽象化就是这样的东西。vaD拜客生活常识网

相关阅读:

  • 纹眉有哪些(纹眉形状)
  • 有哪些杯子(杯子的各种形状及名称)
  • ps如何加粗(如何调ppt的形状线条的粗细)
  • 胚芽是什么(50天胎芽的形状图图片)
  • 怎么剪切图片(照片剪切成各种形状)
  • 我们所看到的星球都是圆的,那宇宙中有没有方形的星球呢
  • 文艺且不落俗的高级感文案
  • 即使是不爱看书的孩子,也会对它情有独钟,这套绘本到底神
  • 缤纷多彩饭团,一招拿下不爱吃饭的小宝宝
  • 馒头最早是由谁发明的?又是什么形状的呢?
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。