泡泡龙游戏开发系列教程(一)

嗨!大家好,我是小蚂蚁。从今天开始,我将会用几篇文章讲一下如何制作一个泡泡龙游戏,泡泡龙是一个传统经典的消除游戏,也是一个经久不衰永不过时的游戏。

这篇文章我们主要来了解一下如何设置泡泡龙游戏的初始布局。

如图,是一个泡泡龙游戏的布局,可以发现它跟其他的消除类游戏还是有一些不同之处的。在其他的消除游戏中,行和列通常都是规则的,例如 1010 游戏中 10 行 10 列的布局。但是在泡泡龙游戏中,不是规则的,比如说第 1 行有 5 列,第 2 行有 4 列,第 3 行 5 列,第 4 行 4 列.....

虽然,是不规则的,但还是有一定的规律的,就是 1,3,5 的奇数行比 2,4,6 的偶数行多出一列。

要创建一个泡泡龙游戏的布局,其实就是需要根据当前的行号列号去设置每个泡泡的位置,之前在消除游戏系列教程中已有讲过,这里我们就跳过一些琐碎的步骤,直接跳到推导结果。

如图,这里是一个重点的地方,即行间距如何计算,从排列图中可以看到,第二行的圆跟第一行的圆之间是有一定的交叉的,所以第二行和第一行的距离并不等于圆的直径。那行间距到底是什么呢?注意看图中标注出的那个直角三角形,第二行和第一行的间距其实就是这个直角三角形的较长的直角边的长度

还记得曾经学过的与直角三角形有关的三角函数吗?什么?早就还给老师了。没关系,可以去先查一下,我就是用到的时候现查的,没什么不好意思的。

这里我们其实已知的是斜边的长度,即一个圆的直径,另外也知道上方的角度是30度,计算长的直角边的长度,这里用到的是余弦函数,已知斜边的长度和角度,可以计算出直角边的长度。

接着,我们来看一下已知条件,以及最终的结果计算公式。

这里需要注意的是,在计算水平方向的 x 坐标时,需要根据当前所在的是奇数行还是偶数行使用不同的计算方式。

在掌握了理论基础之后,接下来只需要使用相应的逻辑来完成这个计算就好了。

首先,我们来布置一下场景。

非常的简单,只有背景,一个“泡泡”和一个“初始化泡泡”(我们把克隆泡泡的逻辑放在这上面)。

接着,创建一些全局变量,用于后续使用。

可以看到这里泡泡的直径,行数,列数,起点的位置x,y,都是已经的条件。

接着,来看一下“初始化泡泡”上的克隆泡泡的逻辑。

使用一个双重循环一行一行的克隆泡泡,这里需要注意的是奇数行偶数行的区别,偶数行创建的泡泡数量要比列数少一,这里我们使用了取余 2 的计算来判断是奇数行还是偶数行(什么?不知道什么是取余计算?快点儿去查一下)。

最后,来看一下“泡泡”上的逻辑积木。

就是根据我们上方的推导公式计算并设置泡泡的 x 坐标和 y 坐标。这里注意一下,奇数行偶数行的x坐标的计算公式有差异。

预览一下场景。

这样,我们就创建了一个 6 行 6 列的泡泡龙游戏初始化的布局了。

在所有的消除游戏里都存在这样一个过程,即正向推导逆向推导。上方我们讲过的这一系列过程就是正向推导,我们根据一个泡泡的行号列号推算出了它游戏界面上的位置(即游戏世界坐标系中的 x 和 y 坐标)。

接下来,我们来看一下逆向推导,即已知当前游戏世界坐标系中的一个点的 x 和 y 坐标,推算出当前点击的这个泡泡的行号列号

推算公式在这里了,主要有两点儿需要注意的地方,第一个是在计算列号时,奇数行偶数行的计算公式不同。另一个是用到了四舍五入,保证了只要这个坐标位置位于这个圆的区域之内,那么它就是位于这个圆上。

建议你在纸上把图画出来,然后对照着公式去带入理解,验证。每次涉及到计算时我都会使用这种方法,而且屡试不爽。

现在理论具备了,接下来我们就在游戏中实现一下这个逆向推导过程,我们实现一个这样的示例:任意点击某个泡泡,然后根据当前点击的位置,推算出当前点击的是哪个泡泡。

这是加在背景上的积木逻辑。

虽然看起来很长,但是其实很简单。就是根据当前手指在屏幕上点击位置的 x,y 坐标,推导出泡泡的行号列号,最后向所有的泡泡发送一个通知。

最后,再来看一下泡泡的完整积木逻辑。

在克隆泡泡时,我们使用两个局部变量(行号列号),记录当前泡泡的位置,然后在接收到“动一下”通知时,用这两个变量来判断当前点击的是否是自己,是的话就“弹出”一下。

最后,我们来预览一下。

点击哪个泡泡,这个泡泡就会动一下。注意,这里当我们点击一个泡泡时,整个过程是这样的:根据当前点击位置的 x,y 坐标,计算出当前点击的时哪一行哪一列的泡泡,然后给所有的泡泡发送了一个“动起来”的通知,接到通知后,行号列号都等于计算出的行号列号的那个泡泡,会自己动一下。

好了,今天的内容就到这里了,我们学习了一下泡泡游戏的初始布局如何设置,然后了解了正向推导逆向推导的过程。如果你看过我之前写的与消除游戏有关的教程,大概就能看出来,在所有的消除类型的游戏中,有些东西是相通的,例如初始的布局正向推导,逆向推导的过程,对于泡泡龙这个消除游戏来讲只不过是稍有差异而已。

理解这些东西最难的地方或许就是那几个数学计算公式,见过很多人一提到数学公式就头大。其实完全没有必要,这些数学计算其实并不复杂,最多不过初中的数学知识,而且即使你全忘光了也没什么关系,完全可以在用到的时候搜索一下某个公式是什么意思,就可以了。

真正让你头大的其实并不是这些数学知识有多难,而是因为你从未尝试过好好的坐下来,拿出一张纸,画出一个图,然后慢慢的分析和理解。

相信我,这并不是浪费时间,所有的消除类型的游戏中有一些东西是完全相通的,只要你深刻的理解并搞清楚一个,以后就会一通百通了。

有的时候一件时间把我们难倒并不是因为这件事情本身太难了,而是因为我们太懒了。


我是会做游戏也会教你做游戏的小蚂蚁,关注公众号【小蚂蚁教你做游戏】,学习更多游戏开发原创教程。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值