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

简介: 这一节里会涉及到比较多的数学运算,不过完全不用担心,试着找一张纸和一支笔,画一画,很容易理解的。

嗨!大家好,我是小蚂蚁。今天我们来继续了解在泡泡龙游戏中,泡泡是如何发射,移动,反弹和停靠的。


这一节里会涉及到比较多的数学运算,不过完全不用担心,试着找一张纸和一支笔,画一画,很容易理解的。


如何处理泡泡的发射



在泡泡龙游戏中,当我们点击屏幕上的一点时,发射器中的泡泡会向我们点击的那个位置发射。想要实现这样的功能,我们就必须要知道当前点击的屏幕位置位于要发射的泡泡的哪个方向,也就说我们需要计算出泡泡的发射角度。


640.png


我们来看图片,一个点是要发射的泡泡的位置(x0,y0),一个点是屏幕点击位置(x1,y1),现在已知这两个点的位置,我们需要计算出一个角度 A,也就是泡泡发射的角度。这里计算角度 A,使用了三角函数中正切函数,对照着右侧的图片和计算公式可以回忆一下那些曾经学过的数学知识。


在小游戏制作工具中运算类别中的一个积木块为我们提供了用于计算角度A的方法。


640.png


具体的泡泡发射角度的计算,只需要像下面这样就可以了。


640.png


刚才我们所计算的情况是点击屏幕的位置位于要发射的泡泡的右侧,接着来看一下当点击位置位于泡泡的左侧时,该怎么计算?


640.png


如图,点击位置位于泡泡左侧,我们需要计算的是绿色的旋转角度,此时如果我们仍然使用上方的计算公式,那么计算出的就是左侧的角度A,但此时这个角度A是个负数(很显然此时 x1-x0 是个负数),想要得到右侧的旋转角度,只需要将计算得到的 -A 加上 180度即可。

在小游戏制作工具中的移动方向(也叫旋转角度)指的是以水平向右为 0 度,然后逆时针旋转指定的度数,此时这个方向就是要移动的方向。

最后,看一下关于旋转角度计算的积木逻辑。


640.png

实话讲,当点击屏幕左侧这个加上180度的计算,我在做的时候是完全靠猜的,点击右侧是比较直观的,但是点击左侧的时候就看不出来了,但是我知道的是一定是某一个值(90?180?270?360?)的加减,所以就挨个尝试,试到 180 的时候就试出来了。所以你看到的上方的分析图,完全属于事后分析。在游戏开发的过程中,一时想不出来并不要紧,我们笨人也是有方法的,这个方式就是猜测加不断尝试。


如何处理泡泡的移动和反弹



泡泡的移动比较简单,我们直接在循环中不停的让它前向移动即可。


对于泡泡碰到两侧墙面的反弹,就又需要计算了。


640.png


如图,是泡泡碰到右侧或左侧反弹后移动角度的计算,是的,这个公式我又是靠猜的,所以这里不进行事后分析了,反正就是那几个特殊的角度数值,不是加就是减,挨个尝试总能试出来的。


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


640.png


预览一下,看看泡泡发射移动和反弹的效果。



b190db226b9d26b6c53a6be6a6134c22.gif


如何处理泡泡的停靠



如果说上方的这些发射,移动,反弹都属于开胃小菜的话,那么我们接下来要上正餐了,请集中你的注意力,跟上文章的思路。


在泡泡的发射,移动和反弹的过程中,我们全部使用的是实时的计算来实现的,没有使用反弹,物理移动等方式。为什么呢?因为对于泡泡龙这个游戏来说,是需要非常精准的,泡泡碰到墙壁后一定会反弹,泡泡碰到任何一个其它的泡泡时,一定会停靠,这其中不允许有失误(见过有泡泡龙游戏泡泡碰到墙壁后没有反弹而是飞出去的吗?),但是物理碰撞和物理移动是有可能有失误状况出现的,所以我们直接放弃了使用物理移动和碰撞检测,而是全部都采用实时计算的方式,因为这种方式不会出现失误。


对于泡泡的停靠,我们仍然是需要使用实时的计算方式,来算出泡泡在何时进行停靠。


66954dc1e93dd2df1a4fafa9e70030a0.png


如图,蓝色的泡泡被发射出去了,它会沿着发射的方向一直移动,直到它碰到任何一个其它的泡泡时停止。


其实,使用碰撞检测是最简单的方式,检测一下这个飞行的泡泡,只要它碰到其它的任何一个泡泡,就让它停止。但是,我们上方说过,碰撞检测并不能保证精准,可能会出现下面这样的问题。


82d50c4062b6b245143d95629b9df8f2.png


这种情况在游戏里是不允许发生的,我们不能让一个泡泡穿透到另一个泡泡的里面。


为了保证碰撞的精准,就需要使用实时的计算来把两个球是否相碰给算出来。


97975d543a5dbd59c3447ed40fdb04b1.png


如图,这就是计算两个泡泡是否碰上的方法,我们只需要计算当前两个泡泡之间的距离,然后判断这个距离是否在碰撞距离之内,如果是的话,就可以说这两个泡泡碰上了。


186219a1f9d27501f2ada6a750f1c6c8.png


计算两点间的距离,我们可以使用这个公式。


365c9818645025fcf0416dee0e7508d8.png


最后,因为我们无法预知玩家将会向哪个方向发射泡泡,所以在计算碰撞时,我们需要计算整个屏幕中所有的泡泡,挨个地计算它与移动的泡泡的距离是否在碰撞距离之内,只要任何一个泡泡满足碰撞条件,那么这个移动的泡泡就应该进行停靠了。


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


54f05820dd96c6ab1c47fa084c045aa0.png


注意其中的用于计算碰撞的双层逻辑循环,这里用到的是逻辑循环而不是重复执行(不记得这两种循环的区别的话,可以参考一下这篇文章),因为我们需要在泡泡移动过程中的每一,都进行一次计算,直到满足碰撞条件时为止。注意其中的两种退出的使用,退出逻辑循环退出的是当前的计算,退出循环退出的是泡泡的移动。当泡泡的移动循环退出时,泡泡也就停止了。


最后,预览一下看看泡泡的停靠。


a3ea63b77257f277fbf2d10c4a295f4c.gif


总结一下,今天我们了解了泡泡龙游戏中泡泡的发射,移动,反弹停靠。其中涉及到了很多的数学计算,我想这又会让不少人头疼了。


分享一下我自己在游戏开发的过程中遇到很多数学计算时的方法。


首先,你要克服自己内心对于数学的恐惧,可以这样想,这最多不过是初中的数学知识(其实绝大部分游戏开发中用到的数学知识都不会超过初中数学的内容),虽然早就忘干净了,但是没关系,现查现用也来得及,你肯定能搞的定,要先在心理上克服它。


越过心里这一关之后,下一步就简单了。拿出纸和笔,画个草图,写写画画(对于数学,在纸上写写画画绝对是最好的学习方式了),然后推导推导公式。不用怕推导错了,因为我们还要拿这些公式到游戏里去验证。不得不说这就是游戏开发的一个好处,你完全可以自己去验证自己的猜想,而且游戏的运行结果会很明确的告诉你,你的猜想是对的还是错的。


最后,就是秘诀了。大胆的去猜测,然后在游戏里去试验。你的游戏又试不坏,你总是可以通过多次的尝试来找到那个最终的正确结果。


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

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