周边系统

本教程的周边系统的学习:签到、存档、成就系统

点击下载工程示例

可以参考视频哦~ 也可以下拉查看图文教程

签到系统

原理:利用当前时间和签到时间的差值,判断签到按钮的开启,并用循环显示所有解锁的图,以及找到下次应解锁的签到图。

签到系统常与存档读档功能结合使用,用存档存下签到时间和签到次数,避免重新进入场景时,签到数据不在。

每次签到的时候,需要判断上次签到时间与现在时间,如果间隔少于规定的时长,那么就无法签到,如果大于时长,就可以签到。签到后会解锁签到的标识。
所以我们要知道上次签到时间、签到次数,先添加两个变量,上次签到时间和签到次数。

此外还需要两个变量,一个存放下次要解锁的签到图编号,另一个是签到时间间隔。

因为每次签到时,都要比较上次签到时间和当前时间,所以需要本地储存组件来存时间,添加本地储存组件

然后把其他的按钮、签到标识等素材放好

注意签到图,是一个精灵里有解锁未解锁两种状态的图

首先把签到图添加到一个同类组里,左下方加号,同类组,

鼠标右键可以新建

改名签到标识,然后把这个图都移动到最右边。

接着给同类组添加实例变量,添加两个,一个是编号,用来区分当前是哪个,另一个是解锁状态




然后回到对象库里,给每个签到图修改一下编号的数值,双击修改,编号从小到大,按照解锁顺序写哦

写事件,首先要确定解锁哪张图,我们用循环找到未解锁的图,把第一个未解锁的图当作下次签到的图。

添加系统的for循环条件,

名称是显示签到标识。起始索引是0,结束索引是签到图的数量,用同类组的表达式,count,他是所有的实例数量

然后添加子事件。

条件是同类组的比较实例变量,编号等于当前循环编号,当前循环编号,用表达式loopindex(),括号里是循环的名字,显示签到标识,英文双引号引起来。

这样就可以按顺序找对应的签到图,再加个条件,解锁状态为0,未解锁的时候,找到这个图,

然后动作,把图的编号给系统变量下次解锁。系统的设置值动作

再加个结束循环,系统的停止循环

预览发现签到图一直闪,

是因为签到精灵里有两张图,一直循环播放。

再添加一条事件,停止播放动画。条件是系统的场景开始时,

动作是同类组签到标识的停止播放

预览正常后,制作点击按钮,签到的效果。当点击按钮的时候

把变量上次签到时间设为当前时间,用表达式Unixtime,

再加动作,用本地储存存签到时间。本地储存的设置条目,键是签到时间,值是变量上次签到时间的。


按钮设为禁用

然后加子事件,找到需要解锁的签到图,用同类组的比较实例变量,当编号为全局变量的下次解锁时,我们把这个图为解锁状态。


把签到图改为解锁状态。也就是设置他的动画帧,注意是同类组的动作,

设为第2张解锁状态,也就是编号1

然后把同类组的实例变量解锁改为1


全局变量签到次数也会+1,系统的加法运算,设置全局变量加1


同时用本地储存保存一下签到次数。

整体事件

效果预览

继续添加事件,制作每隔一段时间,开启下次签到状态。

只要一直计算当前时间与上次签到时间的差值,当差值大于某个数,开启按钮启用就可以了。系统的每帧执行条件

设置值动作

因为计算的结果是毫秒,所以再除于一千,算下多少秒

当间隔>某个值,我们就开启按钮。系统比较变量,间隔大于10的时候,也就是10秒后,开启按钮。

否则,间隔<10,按钮禁用。注意加上系统的否则条件

预览效果:点击,第一个签到。等10秒,按钮可以点击, 第2个签到。再等10秒,按钮可以点击,第3个签到。这就是简单的签到功能。

**注:**当刷新页面时,已经签到的效果会不存在,所以我们要用存档来保证签到一直在。刚才已经把签到事件和次数用本地储存存起来了。现在只要读取存档就可以。

场景开始时,读取本地储存的值。本地储存的检测条目是否存在动作,

先检测上次签到时间,键名是签到时间,与之前设置条目的键名一致。这条检测事件是为了避免上次没签到的情况,


再添加一条时间,当条目存在时,获取签到时间的值,




当获取到后,把这个签到时间给变量上次签到时间,

系统设置值,值是本地储存的这个表达式。这样就获取到了存的签到时间,并且传给了系统的变量。


用同样的方式把签到次数读出来

然后加子事件,把签到次数以内的签到图的解锁状态改变,同样系统的for循环,结束索引是签到次数


继续加子事件,当签到标识同类组的编号为当前循环编号,并且解锁状态为0时,把图的动画帧改为解锁的第2帧,把解锁状态设为1

整体事件

效果预览:点击解锁,刷新后签到状态依然在。

存档读档功能

存档的功能:用本地储存的设置条目动作
读档功能:本地储存的检测条目、获取条目动作。

当遇到大量数据的时候,最好加个数组,然后把数据存在数组里,再用本地储存保存数组的数据

比如现在把签到时间和次数都存在数组里

然后用本地储存设置条目,键名数据,值是数组的数据,这需要用到数组的表达式,asjosn


场景开始时,检测数据的条目,存在时,获取,获取完成,把存的值给数组,

数组的从字符串读取,

json就是本地储存存的值,用表达式.itemvalue,这样就获取到了存在本地的数组数据。

之后使用数组数据,传给全局变量即可。

增加数组后的签到事件整体预览

成就系统

是通过某对象的实例变量与成就标识图身上的变量关联,找到对应的成就标识图进行相应显示。