3

如何制作一个羊了个羊游戏5:快速拾取

 1 year ago
source link: https://blog.51cto.com/u_15530520/6006111
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

如何制作一个羊了个羊游戏5:快速拾取

精选 原创

本文首发于微信公众号【小蚂蚁教你做游戏】,欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。

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

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

如何制作一个羊了个羊游戏5:快速拾取_原创教程

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

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

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

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

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

如何制作一个羊了个羊游戏5:快速拾取_原创教程_02

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

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

如何制作一个羊了个羊游戏5:快速拾取_游戏开发教程_03
如何制作一个羊了个羊游戏5:快速拾取_游戏开发教程_04

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

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

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

如何制作一个羊了个羊游戏5:快速拾取_原创教程_05

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

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

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

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

如何制作一个羊了个羊游戏5:快速拾取_原创教程_06
如何制作一个羊了个羊游戏5:快速拾取_原创教程_07

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

如何制作一个羊了个羊游戏5:快速拾取_游戏开发教程_08

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

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

如何制作一个羊了个羊游戏5:快速拾取_游戏开发教程_09

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

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

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

如何制作一个羊了个羊游戏5:快速拾取_原创教程_10

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

如何制作一个羊了个羊游戏5:快速拾取_原创教程_11

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

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

如何制作一个羊了个羊游戏5:快速拾取_游戏开发教程_12

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

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

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

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

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


欢迎关注小蚂蚁的微信公众号【小蚂蚁教你做游戏】,学习更多游戏开发原创教程。

如何制作一个羊了个羊游戏5:快速拾取_原创教程_13

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK