在游戏中,经常会需要倒计时。比如倒计时10分钟可以获得1点体力,倒计时1小时可以打开宝箱,或者根据游戏计时可以获得奖励等。
今天分享一下如何使用微信小游戏制作工具实现在线计时和离线计时功能。
在线定时器
首先布置场景。
如图所示的场景中,只有背景和基本的文字。我们将使用基本文本来显示倒计时。
实现倒计时功能的一个关键点就是时间的转换,如何将某个“秒数”转换成分、秒,然后最终以“分:秒”的形式显示出来。
我们用“除”运算来计算当前的分钟数,然后用“余”运算来计算当前的秒数。
假设当前剩余时间为158秒。分钟=向下取整(158 / 60)=向下取整(2.6333)=2秒=158%60=38最后可以将分钟和秒拼接在一起,也就是“2:38”,通常分钟和秒都会由于使用两位数显示,所以需要在分钟前面加0,即最终显示的时间为“02:38”。
接下来我们看看具体的实现。
首先创建一些全局变量。
“剩余时间”记录倒计时的总时间(以秒为单位),“分钟”和“秒”记录根据剩余时间计算出的分钟数和秒数,“倒计时数字”记录最终要显示的数字倒计时。
接下来,将倒计时构建块逻辑添加到“基本文本”中。
构建块的逻辑并不复杂。总倒计时时间设置为158秒,计算出对应的分钟和秒,并使用拼接积木将分钟和秒拼接在一起,最后显示在文字上。
运行场景。
如您所见,我们将 158 秒转换为“02:38”,并且显示正确。
让时间流动
接下来,让我们开始倒计时吧!
然后在上面的积木下面添加以下积木,让计时器运行。
我们使用“重复”块来处理运行倒计时,然后使用“等待1秒”块来实现每1秒处理一次。至于时间的转换和显示,同上。如果还有剩余时间,则每隔1秒处理并显示一次。如果没有剩余时间,则倒计时结束并退出循环。
运行一下看看最终效果。
计时器开始正常运行。
使用函数重用构建块
在定时器的积木逻辑中,与时间转换、拼接、显示相关的积木实际上使用了两次。在这种情况下,我们可以将这些重用的构建块放入“函数”中。
我们创建一个“时间转换”函数,然后将这些可重用的构建块放入该函数中。
最终倒计时的所有构建块都是这样的,看起来简单多了。
实现离线定时器
通常我们在游戏中不仅需要在线计时器,还需要离线计时器。那么什么是离线计时器呢?也就是说,当玩家退出游戏时,计时器仍然可以计时。
例如,《精致1010》中有一个“种一朵小花”的功能。玩家每 30 分钟可以给植物浇水一次。通过浇水,植物就会生长,并会产生金币。如果玩家浇水一次后退出游戏,等待30分钟后返回游戏,此时计时器应该结束,玩家可以再次浇花。也就是说,虽然玩家退出了游戏,但是计时器并没有停止,仍然在计时。这就是离线计时功能。
要实现这样的离线定时器功能,我们需要使用2个东西。
首先是“本地缓存”功能,它可以帮助我们将游戏中的数据缓存在本地,这样当玩家下次打开游戏时,就可以通过“本地缓存”获取之前存储的数据。 (本地缓存的具体使用请参考)
第二个东西叫做“时间戳”,指的是从某个时间开始已经过去的秒数。通常时间戳是指“UNIX时间”。
维基百科对UNIX时间的定义:UNIX时间,或者说时间,是UNIX或类UNIX系统使用的时间表示形式:从2020年1月1日0:00:00到现在的总秒数,不考虑闰秒。
通俗地说,这个“时间戳”是指从某个时刻到此时此刻所经过的总时间。我们如何使用它来计算离线时间?比如我8点退出游戏,我可以在退出游戏之前记录下此时的“时间戳”,并利用缓存功能来记录这个时间。然后,9点钟,我重新进入游戏。这时,你可以用当前的“时间戳”减去之前缓存的“时间戳”来计算离线时间。
这就是离线时间的计算原理。其实并不是说游戏退出后就偷偷在幕后运行进行计时。意思是离线时间是通过“本地缓存”和“时间戳”两个东西计算得到的。
接下来我们来实现离线计时功能。
首先,启用插件的本地缓存。
启用后,您可以使用与本地缓存相关的构建块。
接下来,找到获取“时间戳”的构建块。它位于“计算”类别中的“当前时间的 XX”构建块中。单击下拉按钮选择“时间戳”。
最后,让我们看一下实现的构建块逻辑。
我们来梳理一下整个逻辑。每次进入游戏时,首先计算离线时间,用“当前时间戳”减去“之前缓存的时间戳”,然后换算得到离线时间的总秒数,然后将“剩余时间”减去“离线时间”获取最新的“剩余时间”。如果“剩余时间”大于0,则开始倒计时,否则表示倒计时结束。
这里需要注意的一件事是倒计时中添加了两个新的缓存块。每当“剩余时间”发生变化时,我们都会缓存最新的“剩余时间”和“时间戳”。这样,无论玩家什么时候退出游戏,或者进入游戏的其他场景,缓存中的“剩余时间”和“时间戳”都会记录最后一刻。
最后我做了一个定时器示例项目,其中包括在线定时器和离线定时器功能的实现。已开源给社区,大家都可以获取该项目进行适配或学习。
定时器示例项目地址:
今天的分享就到此为止。希望本文能够帮助您彻底理解游戏中定时器的实现原理和方法。
-----
我做的小游戏《精致1010》就到这里了。有兴趣的可以去看看哦~
另外,如果你想学习如何制作游戏,我写了很多教程,关注我的公众号就可以了。