泡泡龙游戏开发实战教程(1):泡泡龙游戏的布局

简介: 泡泡龙游戏开发实战教程(1):泡泡龙游戏的布局

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


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


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



如图,是一个泡泡龙游戏的布局,可以发现它跟其他的消除类游戏还是有一些不同之处的。在其他的消除游戏中,行和列通常都是规则的,例如 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 坐标,计算出当前点击的时哪一行哪一列的泡泡,然后给所有的泡泡发送了一个“动起来”的通知,接到通知后,行号列号都等于计算出的行号列号的那个泡泡,会自己动一下。


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


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


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


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


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

相关文章
|
JavaScript 数据库
uni-app的多环境部署配置
分享下如何对uni-app项目进行多环境打包部署改造
2835 0
|
程序员 C# 图形学
【Unity 3D】C#中条件语句if else switch的讲解
【Unity 3D】C#中条件语句if else switch的讲解
396 1
|
Linux Python Windows
为Python打包创建一个世外桃源,解决打包太大且启动慢的问题
首先是我用的是Anaconda的集成环境,由于Anaconda或者自己搭建的环境里内置了很多库,而且在日常的开发中又安装很多开发所需要的其他库,打包的时候就把很多不必要的模块打包进去,导致打包出来的文件过于臃肿.打开慢由于运行需要加载这些环境,由于加载的库过多导致耗时过长,而且Python是一门解释型语言,本身运行效率上也稍慢,所以能够明显体会到启动时的漫长等待 我们写代码就是为了高效,怎么能受得了打开慢且占资源的东西呢,那如何能解决这个问题呢?
2640 1
|
存储 安全 Java
如何优雅地回答HashSet与HashMap的区别?看这里!
哈喽,大家好!我是小米,29岁程序员。本文聚焦Java开发中经典的面试题——HashSet和HashMap的区别。HashSet基于HashMap实现,存储唯一值;HashMap存储键值对。两者在数据结构、使用场景、操作方法等方面有显著差异。HashSet无序且依赖元素的hashCode和equals方法保证唯一性,而HashMap需注意线程安全问题。掌握这些知识点,助你轻松应对面试。更多技术干货,欢迎关注我的微信公众号“软件求生”。
687 4
|
运维 分布式计算 供应链
医院HIS系统源码,全套云化医院信息管理系统
HIS系统完全基于云端部署,采用B/S架构,并通过软件即服务(SaaS)的形式面向二级医院的可快速交付、便捷运维、云化的医院核心业务平台产品。融合医院HIS和EMR两大主营系统,构建涵盖患者、费用、医嘱、电子病历等核心业务的医院基础信息系统。将HIS与电子病历整合一起形成一体化医护工作站。
855 0
医院HIS系统源码,全套云化医院信息管理系统
|
C# 图形学
unity抛物线的制作
该教程展示了如何在Unity中使用LineRenderer组件和C#脚本绘制抛物线。具体步骤如下:创建一个空物体并添加LineRenderer组件,挂载提供的`SeletParabola`脚本;新建两个Cube作为起点和终点,并将其拖到脚本对应的公共变量上。运行后即可看到从起点到终点的抛物线效果。代码通过计算抛物线上的点并设置给LineRenderer来实现这一效果。此外,还可以为LineRenderer添加贴图以增强视觉效果。
|
API 图形学 开发者
unity 动态添加 EventTrigger
在 Unity 中动态添加 EventTrigger 的原理是利用 Unity 事件系统和 API 创建、配置并绑定事件触发器。EventTrigger 组件允许为游戏对象添加多种交互事件,如点击、拖拽等。通过 `AddComponent<EventTrigger>()` 方法创建组件实例,并使用 `EventTrigger.Entry` 定义事件类型和回调函数。示例代码展示了如何为 Image 组件添加指针进入和离开的事件监听器,分别改变其颜色。
yolov5项目如何安装pycocotools和opencv-python?
本文提供了解决yolov5项目中安装pycocotools和opencv-python包失败的两种方法:手动安装或使用国内镜像源进行安装。
yolov5项目如何安装pycocotools和opencv-python?
|
Go 数据安全/隐私保护
Mutex正常模式与饥饿模式
在Go中,sync包提供了一种称为Mutex(互斥锁)的机制来实现对共享资源的并发访问控制。Mutex有两种模式:正常模式和饥饿模式。
680 0
|
图形学 开发工具 git
Unity与版本控制:游戏开发团队如何利用Git打造高效协作流程,实现代码管理的最佳实践指南
【8月更文挑战第31天】版本控制在软件开发中至关重要,尤其在Unity游戏开发中,能提升团队协作效率并避免错误。本文介绍如何在Unity项目中应用版本控制的最佳实践,包括选择Git、配置项目以排除不必要的文件、组织项目结构、避免冲突、规范提交信息以及使用分支管理开发流程,从而提高代码质量和团队协作效率。
1899 2