羊了个羊游戏系列教程6:快速拾取

简介: 如图,每个图标的拾取之间有一定的时间间隔,这就意味着如果玩家快速的点击图标,这些在时间间隔之内被点击的图标是没有反应的。这是一种很不好的体验,因为玩家需要等待游戏。对于玩家来讲,自己的操作是不会有问题的,所有的问题都是游戏的问题。我们作为游戏开发者应该尽量避免让玩家遇到这样的情况。所以,这篇教程里,我们就来解决一下这个拾取时间间隔的问题。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

如果你想更好的学习做游戏的话,我的建议是跟着这个系列教程从零开始做自己制作一个游戏。但有时你可能会遇到实在找不到问题的情况,此时可以拿过示例项目来参考一下,对照着自己的积木逻辑来寻找问题。所有小蚂蚁的学员可以前往【游戏模版库】中免费获取示例项目,非学员如需示例项目,可前往下方的小商店进行购买。

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

这里是我的游戏开发课程服务,不只是一门课,而是围绕着新手学习做游戏有关的一整套服务。致力于帮助更多的人学会做游戏并做出自己的游戏,欢迎来跟 116 位同学一起学习做游戏。【点击这里】了解课程服务详情。

这里是小蚂蚁的小游戏系列,闲暇之余希望能给你带来片刻的放松和愉悦。无需下载安装,点击下方的游戏卡片就可以直接玩啦!









也欢迎加个微信,交个朋友,朋友圈每日分享与做游戏有关的知识和内容,可以来围观。备注“学习做游戏”可免费领取学习做游戏的原创教程资料。接受付费咨询,不闲聊,望见谅。

相关文章
|
JSON 小程序 JavaScript
羊了个羊【游戏】
羊了个羊【游戏】
76 0
|
6月前
|
开发者
羊了个羊游戏开发实战教程(6):快速拾取
羊了个羊游戏开发实战教程(6):快速拾取
46 0
|
6月前
|
数据可视化 开发工具 开发者
羊了个羊游戏开发实战教程(1):堆叠牌的拾取
羊了个羊游戏开发实战教程(1):堆叠牌的拾取
113 0
|
6月前
|
容器
羊了个羊游戏开发实战教程(4):道具的实现
羊了个羊游戏开发实战教程(4):道具的实现
94 0
|
6月前
|
索引
羊了个羊游戏开发实战教程(2):随机生成卡牌
羊了个羊游戏开发实战教程(2):随机生成卡牌
77 0
|
6月前
羊了个羊游戏开发实战教程(3):卡牌的放置和消除
羊了个羊游戏开发实战教程(3):卡牌的放置和消除
68 0
|
6月前
羊了个羊游戏开发实战教程(5):制作更多层
羊了个羊游戏开发实战教程(5):制作更多层
111 0
|
容器
你也能做个羊了个羊游戏系列教程4:道具的实现
嗨!大家好,我是小蚂蚁。 今天是羊了个羊系列教程的最后一节,我们来学习一下游戏中的三种道具的实现。 这三种道具分别是:移出三张牌,撤回一步,随机打乱顺序。 接下来,我们就依次来看一下每种道具的具体实现。 这个道具的作用是从当前的卡牌槽中移出前三张牌,把它们暂时放在卡牌槽的上方,移出的牌可以在后续再次加入到卡牌槽中。 使用移出道具时,有可能会出现两种情况。一种是当前卡牌槽中的卡牌数量小于等于 3 张,一种是当前卡牌槽中的卡牌数量大于 3 张
107 0
你也能做个羊了个羊游戏3:卡牌拾取和删除
羊了个羊游戏第二关过不去?不如自己通过学习动手做一个第二关能够闯过去的羊游戏~ 欢迎点赞分享,鼓励小蚂蚁继续创作。
71 0
|
索引
你也能做个羊了个羊游戏系列教程2:随机生成卡牌
上一节教程中我们使用的红色和白色的方块代表卡牌,为了区分不同的牌,我找了一些可爱的小动物头像(共 10 个),我们仍然是创建两层堆叠牌,不过这次这些牌会显示出不同的类型(不同的动物头像),每次生成的牌都是随机的,也就说即使是同一个关卡,每次打开也都会不一样。 接下来我们就直接开始吧! 还是先从理论开始,一共有 10 种不同类型的小动物卡牌,我们先给它们依次编上序号。
185 0