今天,你打卡了吗?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/shirln/article/details/91456364

    

点击蓝色字关注我们!

一个努力中的公众号

长的好看的人都关注了

640?

 
  
 
  


介绍 

签到模块几乎是每个游戏必不可少的模块,它存在的目的主要是为了让玩家坚持每天上线,给予这些玩家一定的奖励,从而保证游戏留存率。

今天来给大家讲讲签到模块的实现,并提供一些优质的方法,实现某些功能。先说说我们的需求吧,需要显示整月每日的签到奖励信息,签到情况。为了美观,将其设计为上下滑动可查看当月整体情况。

搭建UI 

1.添加一个ScrollView,命名为signScrollView,调整合适大小,设置ScrollView属性如下:
640?wx_fmt=png
主要注意取消勾选Horizantol(即取消水平滑动,允许垂直滑动,该功能可根据实际情况修改)
2.同时调整ScrollView下的View大小,和ScrollView大小保持一直,表示显示窗口大小。
3.为View下的content添加Layout组件,选择类型为GRID,并设置Padding的属性,即content下面的item距离content上下左右的间距,同事设置每个item之间的上下间距(Spaceing X),左右间距(SpaceingY)
640?wx_fmt=png

添加事件 
self.findBtn("btn_sign", uiRoot.bottom, () => {     //签到处理     } })
处理数据 

服务器端使用一个Int32位的数存储传输当月签到情况
// 用位操作表示签到情况(d=月中第几天;

第d天是否签到=(signDay & (1<<(d-1))) == 1)
int32 signDay = 4;

//data.signDay服务器数据(int32)var str = data.signDay.toString(2).split('');//将int32转换位二进制数字符串,进而保存位数组cc.log("逆序日期数组", str);var dayArr = str.reverse().join('').split('');//将该数组逆序排列cc.log("正序日期数组", dayArr );//上面的操作是为了调试输出的日志,可注释for (let i = 0; i < this.monthDays; i++) {    if ((data.signDay & (1 << i)) == 1) {        //已签到    } else {        //未签到    }}
至此,签到功能的精髓已经现行了,恭喜你,打卡成功。


总结

使用一个int32位的数代替传统的签到数组,既能提高传输速率,也能降低内存的消耗,第一次使用该方法来实现数据的传输与保存,特意记录下来分享给大家,希望对你有所帮助!


喜欢本文的朋友们,欢迎关注订阅号,收看更多精彩内容!

640?wx_fmt=png

猜你喜欢

转载自blog.csdn.net/shirln/article/details/91456364