如何做个泡泡龙游戏(四)

简介: 嗨!大家好,我是小蚂蚁。在上一节中,我们学习了泡泡的发射,移动,反弹和停靠。所有的这些都是以计算的方式来实现的,我们没有选择使用物理,碰撞检测这些方式,因为泡泡龙游戏需要一定的精准性,而通过在每一帧进行计算,可以保证游戏的精准。

嗨!大家好,我是小蚂蚁。在上一节中,我们学习了泡泡的发射,移动,反弹和停靠。所有的这些都是以计算的方式来实现的,我们没有选择使用物理,碰撞检测这些方式,因为泡泡龙游戏需要一定的精准性,而通过在每一帧进行计算,可以保证游戏的精准。


上一节中,对于泡泡的停靠,我们使用的方式是在泡泡移动的每一帧,对游戏中的所有泡泡进行一次遍历,判断每一个泡泡与移动的泡泡间的距离,如果距离在碰撞距离之内,则证明发生了碰撞,泡泡停靠。


今天,我们继续来处理泡泡停靠后的一些事情。



如图,红色虚线的泡泡是需要停靠的泡泡,在这 3 个泡泡中,只有中间的泡泡停靠的位置正确,其余的两个泡泡停靠的位置都不对。再次看一下图中的泡泡龙游戏中所有的泡泡的布局,虽然奇数行和偶数行是参差排列的,但是每一个泡泡在整个排列布局中都有一个自己确切的位置。


也就是说,在整个游戏中是不允许泡泡随意的设置自己的位置的,如图的第一个和第三个泡泡那样。我们需要做的是计算出当前的这个将要停靠的泡泡的行列号,然后根据行列号为其设置一个指定的位置。


如何计算要停靠的泡泡的行列号呢?还记得我们在第一节中讲过的吗?根据屏幕上任意一点的位置倒推出当前位置泡泡的行列号。



当泡泡遇到碰撞停止移动后,我们可以根据这个公式推算出当前这个要停靠的泡泡的行列号


接着,我们来看一下发射泡泡的积木逻辑。



在上一节的积木逻辑上做了一些改动。将“泡泡的碰撞计算”和“行列号的计算”放到了函数中,这样整个逻辑看起来更简洁了。


碰撞检测函数。


行列号计算函数。


第一节中我们已经详细讲过原理了,这里就不赘述了,忘记的话可以去回顾一下。


在经历过这一系列的处理之后,我们得到了要停靠的泡泡的行号列号,有了行列号,我们只需要根据行列号在指定的位置创建一个新的泡泡就可以了吧!


且慢,这里还有一种情况需要处理。



如图,我们沿着红色的虚线箭头的方向,发射了一个泡泡,每一帧泡泡都会向前移动一段距离(如果不了解游戏循环中的“帧”,可以看一下这篇文章),碰撞检测计算以及行列号的计算是在每一帧泡泡移动后计算的。假如,泡泡整个移动的过程共包含 4 帧,每一帧移动过后都会进行一次碰撞检测计算,在前 3 帧,都没有计算出碰撞,在第 4 帧,计算出碰撞了,然后泡泡的移动停止,并且以当前的位置(x,y)进行行列号的计算,但是很明显此时计算出的行列号将会和重叠的蓝色泡泡一样,这就造成了一个问题。



根据当前的计算,绿色的泡泡会重叠在蓝色的泡泡之上。但是,它正确的位置应该是在蓝色泡泡的左下方的位置。


我们如何处理这样的问题呢?


首先我们来看一下为什么会发生这样的问题。移动的泡泡每一帧都会有一段向前的位移,假设当前的泡泡是在水平向右移动,第 1 帧位于 (0,0),我们为泡泡设置每一帧移动 10 的距离,那么第 2 帧泡泡就会位于 (10,0) 的位置,接着 (20,0),(30,0)...... 现在假设我在 (15,0) 的位置上有一个泡泡,那么计算出碰撞的时候泡泡其实已经到了 (20,0) 的位置。可见正是因为这个每一帧 10 的间隔, 才导致了这种“跑过头”的情况。如果每一帧泡泡只移动 1 的距离,就不会出现这样情况了。


那是不是我们直接将泡泡每一帧的移动距离设置为 1 就好了。不是,那样泡泡移动的会非常的缓慢。


想要解决这个问题我们需要一个回退的处理。跑过头了没关系,我们向后一点儿一点儿的回退,直到回退到不发生碰撞为止。



如图,如果根据“行列号”的计算结果得出当前要停靠的泡泡与已有的泡泡重叠,那么,我们就让这个要停靠的泡泡不停的一点儿一点儿的回退,直到没有碰撞时为止。此时这个位置就是泡泡要停靠的位置。


我们来看一下回退的积木逻辑。



这里需要注意的是整个回退的计算是在一帧之内执行的,所以这里我们需要使用到逻辑循环积木,结合着上方的图片理解一下这段逻辑,如果位置重叠了,就一点儿一点儿的回退,每回退一点儿都进行一次碰撞计算(可见,整个回退处理包含了大量的计算),直到不发生碰撞,此时的位置就是我们要停靠的泡泡的位置。最后,将位置再次带入计算出行列号。


最后,我们来看一下发射泡泡的所有积木逻辑。



整个逻辑除了处理发射泡泡的移动,反弹,停靠等,其实最重要的就是得到了一个“行号和列号”,我们会在这个行号和列号处克隆一个新的泡泡。至此发射泡泡的使命就完成了,最后我们将其进行删除处理。


最后,我们来预览一下游戏。我为游戏增加了一些素材,看上去是不是有点儿样子了呢!



今天的内容就到这里了,泡泡停靠的计算和处理是泡泡龙游戏中的一个难点。你需要理解游戏中“帧”,对于移动来讲,游戏中的物体是一帧一帧的前进。对于计算来讲,通常是需要在一帧之内进行大量的计算,这里需要额外的注意“重复执行”积木和“逻辑循环”积木的区别。

我是会做游戏也会教你做游戏的小蚂蚁,想学习做游戏的话,关注我的公众号就对啦!

这里是我的游戏开发课程服务,不只是一门课,而是一套围绕着新手学习做游戏有关的一整套服务。致力于帮助更多的人学会做游戏并做出自己的游戏,目前已有 44 名学员,多位同学已经通过学习做出了自己的游戏,如果你是一位想学习做游戏的朋友,欢迎【点击这里】了解详情。

这是我做的几个简单好玩消除小游戏,闲暇之余希望能给你带来片刻的放松和愉悦。

精致1010

一个很精致的消除游戏。

小程序

精致点点连线

忙碌生活中的片刻放松。

小程序

水果方块1010

果汁四溅的经典消除游戏。

小程序

圆点守护者

为守护家园而战。

小程序

也欢迎加个微信,交个朋友,朋友圈每日分享与做游戏有关的知识内容,可以来围观。接受付费咨询,不闲聊,望见谅。


相关文章
|
6月前
|
算法
泡泡龙游戏开发实战教程(6):实现连锁消除
泡泡龙游戏开发实战教程(6):实现连锁消除
76 0
|
小程序 流计算
如何做个泡泡龙游戏(三)
嗨!大家好,我是小蚂蚁。今天我们来继续了解在泡泡龙游戏中,泡泡是如何发射,移动,反弹和停靠的。 这一节里会涉及到比较多的数学运算,不过完全不用担心,试着找一张纸和一支笔,画一画,很容易理解的。
127 0
|
小程序
如何做一个泡泡龙游戏(一)
嗨!大家好,我是小蚂蚁。从今天开始,我将会用几篇文章讲一下如何制作一个泡泡龙游戏,泡泡龙是一个传统经典的消除游戏,也是一个经久不衰永不过时的游戏。 这篇文章我们主要来了解一下如何设置泡泡龙游戏的初始布局。
148 0
|
小程序 索引
如何做一个泡泡龙游戏(二)
嗨!大家好,我是小蚂蚁。今天我们继续学习制作一个泡泡龙游戏。 绝大部分的泡泡龙游戏都是关卡制的,你玩过了一关,然后接着再玩下一关。每个关卡其实都是预先设计好的,闯关的过程就是游戏将一个一个设计好的关卡呈现给玩家的过程。这些关卡都是怎样设计的呢?游戏又是怎样将这些设计好的关卡呈现出来的呢?欢迎带着这两个疑问开启今天的阅读之旅。
143 0
|
算法 小程序
如何做一个泡泡龙游戏(六)
嗨!大家好,我是小蚂蚁。 上一节中,我们学习了泡泡龙游戏中的查找算法,这个算法可以帮助我们找到所有相邻的相同颜色的泡泡,在查找完泡泡之后,再通过判断满足条件的泡泡的数量是否大于等于 3,来决定是否应该进行消除。
112 0
|
算法 小程序
如何做一个泡泡龙游戏(五)
嗨!大家好,我是小蚂蚁。我们今天来继续学习泡泡龙游戏中最核心的东西:查找匹配算法。 其实这也不算是什么新东西了,如果你有看过我的其它关于消除游戏的教程,应该会知道,消除游戏的查找算法就那么一个,不论何种类型的消除游戏,这个算法的核心是不变的,只不过会根据不同类型的消除稍作调整而已。所以,如果你之前对查找算法还不是很了解的话,那么就尝试跟随着这篇教程把它彻底搞懂吧!
115 0
|
算法 索引 容器
如何做一个俄罗斯方块游戏(二)
嗨!大家好,我是小蚂蚁。今天我们继续学习如何做一个俄罗斯方块游戏。整个系列教程计划按照这个流程图开展,这也是我制作整个游戏的过程,今天我们就来看一下“随机生成形状”这个模块。想要实现随机的生成形状,首先必须要知道在俄罗斯方块中一共有多少种形状(也就是我们上一节中留下的第二个问题)。
180 0
|
定位技术 开发者
如何做一个俄罗斯方块游戏(一)
从今天开始,我将开启一个新的游戏,并且顺带着会写一个新的系列教程,这个游戏就是人人都知道的——俄罗斯方块。 我一直都在做消除类型的游戏,在所有消除类型的游戏里,俄罗斯方块可以称得上是“鼻祖”了,所以,不论怎样这个系列里都不能少的了它。
144 0
|
小程序 索引
如何做一个塔防小游戏(二)
为了方便设置炮塔的位置,可以使用一个精灵图片作为标识,图中我使用了黄色的五角星作为炮塔位置的标识,可以在场景区中直接拖拽五角星对炮塔的位置进行设置。然后在游戏启动后我们将使用炮塔创建按钮来替换这些五角星的位置。
102 0
|
小程序 容器
如何做一个塔防小游戏(一)
实现一个防守塔非常的简单,因为小游戏制作工具已经为我们提供了现成的“行为”了。 选中作为炮塔的精灵,然后在属性区的下方点击“管理行为”按钮,在行为对话框中开启“炮塔”行为。这个行为已经为我们提供了制作一个防守塔所需的大部分的功能了。
162 0