嗨!大家好,我是小蚂蚁。
之前我们实现的游戏中,图标的拾取是有时间间隔的。
如图,每个图标的拾取之间有一定的时间间隔,这就意味着如果玩家快速的点击图标,这些在时间间隔之内被点击的图标是没有反应的。这是一种很不好的体验,因为玩家需要等待游戏。
对于玩家来讲,自己的操作是不会有问题的,所有的问题都是游戏的问题。我们作为游戏开发者应该尽量避免让玩家遇到这样的情况。所以,这篇教程里,我们就来解决一下这个拾取时间间隔的问题。
想要解决一个问题,首先要弄清楚之所以出现这种问题的原因。
这里顺便提一句,很多人都喜欢提问题,尤其是软件或者游戏中出现的 bug。并不是所有的问题都能够被找到被解决,对于开发人员来讲哪些是能够被解决的问题呢?在特定的情境下可以重复出现的问题,一个问题只要在固定的情境下能够重复出现,这种问题就一定能够排查出原因,只要找到原因的大概率都是能解决的。如果一个问题只是偶尔出现,无法进行复现,这样的问题是很难解决的。
来看一下卡牌无法快速连续拾取的原因。
如图,是卡牌拾取的积木逻辑,这里在执行拾取逻辑之前,先进行了一个判断,判断当前是否可操作,如果可以操作的话,才执行卡牌的拾取逻辑。如果当前的卡牌可以操作,则在进行卡牌拾取的时候,将“是否可操作”的全局变量设置为 0 ,即不可操作。所以在这个变量变为 1 之前,所有点击的卡牌都不会被拾取到。这个就是无法快速拾取卡牌的原因了。
那“是否可操作”变量是什么时候被重新设置为 1 的呢?
在卡牌槽上的消除计算逻辑中,当所有的处理(卡牌插入卡槽,卡槽中的卡牌移动,卡牌消除,消除后位置调整)结束之后,可操作被设置为 1,才能够去拾取下一张牌。可见,如果一张牌拾取之后满足消除条件,进行消除操作,整个等待的时间还是很长的。
问题的原因找到了,下面我们来看一下如何解决这个问题。想要快速连续的进行拾取操作,这个“是否可操作”变量置 1 的逻辑就要提前进行,最好是一张牌拾取完成之后,变量就立刻设置为 1,这样下一张牌就能再次拾取了。
但是,想要将“可操作”提前,并不是将这块积木放到前面就行了,我们还需要考虑卡牌的拾取的操作回合。
如图,是一个卡牌拾取的完整回合,之前我们把“可操作”设置放到了一个操作回合结束之后进行。现在我们要把这个设置提前,就需要考虑到整个流程,比如说当你拾取下一张卡牌的时候,上一张卡牌卡牌还在进行插入操作怎么办?上一张卡牌正在进行消除处理时怎么办?卡槽中的卡牌正在进行位置调整时怎么办?
我们要找到一个合适的时机,既要保证当前拾取的牌能够顺利执行完自己的操作回合,也要保证之前的牌能够正确地执行完它的操作回合。
下面我们对现有的逻辑进行一点儿修改,将“可操作”设置提前。如果你一时看不懂也没关系,先照着在项目中操作,然后再结合着项目中的积木逻辑尝试理解。
我们首先修改一下插槽卡牌的克隆逻辑。
如图,我们做了两处修改,一个是将消除计算的通知提前了,另一个是增加了可操作设置。注意,这里我们要首先判断一下当前卡牌槽的是否已满(已有 7 张牌),如果是的话,就不能继续进行拾取操作了,因为再拾取卡牌就超出卡槽了。
现在我们可以连续甚至是以很快的速度点击拾取图标了。但是注意观察这里还是有一点儿问题的,比如说在三个猴子图标消除的时候,第三个猴子图标还没有移动到卡槽中,三个图标就消除了。
因为我们将“消除计算”提前了,所以现在的整个回合看起来像是这样的。
如图,现在拾取的卡牌移动插入卡槽,卡槽中卡牌位置调整,以及消除判断和处理是同步进行的。所以当有消除时,卡牌还没有移动到卡槽中就被消除了。想要解决这个问题,我们要将卡牌的消除处理稍微延迟一点儿,要让卡牌移动到卡槽中之后,才进行消除处理。
如何实现呢?这里可以使用一块“等待某条件达成”的积木。
首先,我们修改一下插槽卡牌的克隆逻辑。
最后,我们在消除之前,增加一块“等待某条件达成”的积木。
如图,等待的条件就是“正在插牌”的这个全局变量的值变成 0(即当前的牌已经进入到卡槽中了)。这个等待积木的作用是将积木逻辑暂停下来,一直到其中的条件达成之后,再继续执行下面的积木逻辑。
最后,再来看一下消除的效果。
消除处理会在卡牌达到卡槽之后进行。
今天的内容就到这里了,解决这个无法连续点击的问题,从头到尾我们增加和调整了也就是几块积木。也许你看过教程后,会恍然大悟,原来这么简单就能解决了,为什么我就是想不到呢?
解决问题考验的是我们的分析能力,而分析能力又需要一个前提,那就是对于所做项目的足够了解。即使你的逻辑分析能力再好,如果对于项目本身不熟悉的话,分析能力也是派不上用场的,这也就是为什么很多同学拿到一个别人的项目过来,完全不知道从何处下手的原因。
所以,我希望大家能够自己动手做,这是了解和熟悉一个项目的最好方法。只有具备足够的了解,你的分析能力才能派上用场,当你遇到问题时,才能知道该去哪里排查原因,最终找到解决方法。
最终的修改和调整只不过是对分析结果的验证而已。
我在这篇文章里演示了从分析问题,到梳理游戏流程,到找到解决方法,到解决问题的整个过程。希望你学习的是分析解决问题的方法,而不是最终的那几块积木。
识别上方的二维码,可以体验这个小游戏的示例。
---
欢迎关注我的微信公众号【小蚂蚁教你做游戏】,每天学点儿游戏开发知识。
也欢迎加小蚂蚁微信(xiaomayi6669),交个朋友。
这里是小蚂蚁的小游戏系列,闲暇之余希望能给你带来片刻的放松和愉悦。无需下载安装,微信扫码可以直接玩啦!