从零开始教你制作一个羊了个羊游戏5:快速拾取

797 阅读6分钟

嗨!大家好,我是会做游戏也会教你做游戏的小蚂蚁。欢迎关注微信公众号【小蚂蚁教你做游戏】,每天学点儿做游戏的知识。

之前我们实现的游戏中,图标的拾取是有时间间隔的。

如图,每个图标的拾取之间有一定的时间间隔,这就意味着如果玩家快速的点击图标,这些在时间间隔之内被点击的图标是没有反应的。这是一种很不好的体验,因为玩家需要等待游戏。

对于玩家来讲,自己的操作是不会有问题的,所有的问题都是游戏的问题。我们作为游戏开发者应该尽量避免让玩家遇到这样的情况。所以,这篇教程里,我们就来解决一下这个拾取时间间隔的问题。

想要解决一个问题,首先要弄清楚之所以出现这种问题的原因。

这里顺便提一句,很多人都喜欢提问题,尤其是软件或者游戏中出现的 bug。并不是所有的问题都能够被找到被解决,对于开发人员来讲哪些是能够被解决的问题呢?在特定的情境下可以重复出现的问题,一个问题只要在固定的情境下能够重复出现,这种问题就一定能够排查出原因,只要找到原因的大概率都是能解决的。如果一个问题只是偶尔出现,无法进行复现,这样的问题是很难解决的。

来看一下卡牌无法快速连续拾取的原因。

如图,是卡牌拾取的积木逻辑,这里在执行拾取逻辑之前,先进行了一个判断,判断当前是否可操作,如果可以操作的话,才执行卡牌的拾取逻辑。如果当前的卡牌可以操作,则在进行卡牌拾取的时候,将“是否可操作”的全局变量设置为 0 ,即不可操作。所以在这个变量变为 1 之前,所有点击的卡牌都不会被拾取到。这个就是无法快速拾取卡牌的原因了。

那“是否可操作”变量是什么时候被重新设置为 1 的呢?

在卡牌槽上的消除计算逻辑中,当所有的处理(卡牌插入卡槽,卡槽中的卡牌移动,卡牌消除,消除后位置调整)结束之后,可操作被设置为 1,才能够去拾取下一张牌。可见,如果一张牌拾取之后满足消除条件,进行消除操作,整个等待的时间还是很长的。

问题的原因找到了,下面我们来看一下如何解决这个问题。想要快速连续的进行拾取操作,这个“是否可操作”变量置 1 的逻辑就要提前进行,最好是一张牌拾取完成之后,变量就立刻设置为 1,这样下一张牌就能再次拾取了。

但是,想要将“可操作”提前,并不是将这块积木放到前面就行了,我们还需要考虑卡牌的拾取的操作回合。

如图,是一个卡牌拾取的完整回合,之前我们把“可操作”设置放到了一个操作回合结束之后进行。现在我们要把这个设置提前,就需要考虑到整个流程,比如说当你拾取下一张卡牌的时候,上一张卡牌卡牌还在进行插入操作怎么办?上一张卡牌正在进行消除处理时怎么办?卡槽中的卡牌正在进行位置调整时怎么办?

我们要找到一个合适的时机,既要保证当前拾取的牌能够顺利执行完自己的操作回合,也要保证之前的牌能够正确的执行完它的操作回合。

下面我们对现有的逻辑进行一点儿修改,将“可操作”设置提前。如果你一时看不懂也没关系,先照着在项目中操作,然后再结合着项目中的积木逻辑尝试理解。

我们首先修改一下插槽卡牌的克隆逻辑。

如图,我们做了两处修改,一个是将消除计算的通知提前了,另一个是增加了可操作设置。注意,这里我们要首先判断一下当前卡牌槽的是否已满(已有 7 张牌),如果是的话,就不能继续进行拾取操作了,因为再拾取卡牌就超出卡槽了。

现在我们可以连续甚至是以很快的速度点击拾取图标了。但是注意观察这里还是有一点儿问题的,比如说在三个猴子图标消除的时候,第三个猴子图标还没有移动到卡槽中,三个图标就消除了。

因为我们将“消除计算”提前了,所以现在的整个回合看起来像是这样的。

如图,现在拾取的卡牌移动插入卡槽,卡槽中卡牌位置调整,以及消除判断和处理是同步进行的。所以当有消除时,卡牌还没有移动到卡槽中就被消除了。想要解决这个问题,我们要将卡牌的消除处理稍微延迟一点儿,要让卡牌移动到卡槽中之后,才进行消除处理。

如何实现呢?这里可以使用一块 “等待某条件达成” 的积木。

首先,我们修改一下插槽卡牌的克隆逻辑。

最后,我们在消除之前,增加一块“等待某条件达成”的积木。

如图,等待的条件就是“正在插牌”的这个全局变量的值变成 0(即当前的牌已经进入到卡槽中了)。这个等待积木的作用是将积木逻辑暂停下来,一直到其中的条件达成之后,再继续执行下面的积木逻辑。

最后,再来看一下消除的效果。

消除处理会在牌达到卡槽之后进行。

今天的内容就到这里了,解决这个无法连续点击的问题,从头到尾我们增加和调整了也就是几块积木。也许你看过教程后,会恍然大悟,原来这么简单就能解决了,为什么我就是想不到呢?

解决问题考验的是我们的分析能力,而分析能力又需要一个前提,那就是对于所做项目的足够了解。即使你的逻辑分析能力再好,如果对于项目本身不熟悉的话,分析能力也是派不上用场的,这也就是为什么很多同学拿到一个别人的项目过来,完全不知道从何处下手的原因。

所有,我希望大家能够自己动手做,这是了解和熟悉一个项目的最好方法。只有具备足够的了解,你的分析能力才能派上用场,当你遇到问题时,才能知道该去哪里排查原因,最终找到解决方法。

最终的修改和调整只不过是对分析结果的验证而已。

我在这篇文章里演示了从分析问题,到梳理游戏流程,到找到解决方法,到解决问题的整个过程。希望你学习的是分析解决问题的方法,而不是最终的那几块积木。