功能需求:

1. 需要实现倒计时功能,在屏幕上显示00:00格式的倒计时时间

2. 跳转到别的页面中,也需要在后台倒计时来恢复体力

3. 游戏关闭后,再次进入的时候在指定页面中显示倒计时时间和剩余体力值

4. 体力恢复最大值时,显示Max

。。。。。。

思路:

1. 存储一个时间值(心的倒计时结束时间),使用time(0)来获取一个以秒为单位的时间(时间是从1990-01-01开始的时间)

2. 第一次消耗心的时候,存储  当前时间点 + 每颗心恢复所需的时间

3. 之后每次消耗心的时候就存储  读取的存储的时间点 + 每颗心恢复所需的时间

4. 在一个界面中, 获取当前时间点、结束时间点、间隔时间

5. 如果  间隔时间 =  结束时间点 - 当前时间点  <= 0 :倒计时时间已到或已过,恢复最大体力值,暂停倒计时

    间隔时间  >  0  :  倒计时开始,调用schedule的自定义updateTimeOneHeart方法,每秒都改变一下 倒计时的Label  

6. 在updateTimeOneHeart方法中,获取当前时间点、结束时间点、间隔时间,

    计算 倒计时的初始时间   间隔时间 % 每颗心恢复所需要的时间

    当 初试时间为 0 的时候 , 心 + 1;在此之前先判断是否为最大的心值

基本就这些了

代码实现:

在需要显示倒计时的界面的init方法中调用timeHeartLabel()函数就可以了,

本程序中,消耗心的时候程序有个动画,所以需要更新下label

在本程序中,有一个定时更新 Label的函数,

我在其中又调用了showHeartTime方法,用来更新界面中的 心的倒计时的 label

  1 void LevelMapScrollView::timeHeartLabel()
  2 {
  3     /*
  4      *    判断是否满心
  5      *  是否显示倒计时
  6      *
  7      */
  8
  9     // 当时时间(秒) // 满心的时间 // 间隔时间
 10     int secTotal = time(0);
 11     int endSec = readTimeHeart();
 12     int secOffset = endSec - secTotal;
 13     // 满 心
 14     if (secOffset <= 0)
 15     {
 16         int heartNum = UserData::shared()->getHeart();
 17         if (heartNum < 10)
 18         {
 19             UserData::shared()->setHeart(10);
 20         }
 21         showHeartTime();
 22         saveTimeHeart(secTotal);
 23         unschedule(schedule_selector(LevelMapScrollView::updateTimeOneHeart));
 24         return;
 25     }
 26
 27     // 当前需要恢复的心
 28     int nrestoreHeart = secOffset / TimeRestoreHeart + 1;
 29     UserData::shared()->setHeart(10 - nrestoreHeart);
 30
 31     // 倒计时 初始时间
 32     m_startTime =  secOffset % TimeRestoreHeart;
 33
 34     log("---- silent ---- LevelMapScrollView :: timeHeartLabel : curSec,endSec,Offsec,startTime : %d, %d, %d, %d" , secTotal, endSec, secOffset, m_startTime);
 35     showHeartTime();
 36     schedule(schedule_selector(LevelMapScrollView::updateTimeOneHeart), 1.0f);
 37
 38 }
 39
 40 void LevelMapScrollView::updateTimeOneHeart( float dt )
 41 {
 42     // 当时时间(秒)
 43     int secTotal = time(0);
 44
 45     // 满心的时间
 46     int endSec = readTimeHeart();
 47
 48     int secOffset = endSec - secTotal;
 49     // 满 心
 50     if (secOffset <= 0)
 51     {
 52         int heartNum = UserData::shared()->getHeart();
 53         if (heartNum < 10)
 54         {
 55             UserData::shared()->setHeart(10);
 56         }
 57         showHeartTime();
 58         saveTimeHeart(secTotal);
 59         unschedule(schedule_selector(LevelMapScrollView::updateTimeOneHeart));
 60         log("---- silent ---- LevelMapScrollView :: updateTimeOneHeart : curSec,endSec,Offsec,startTime,heart : %d, %d, %d, %d, %d" , secTotal, endSec, secOffset, m_startTime, UserData::shared()->getHeart());
 61         return;
 62     }
 63     // 倒计时 初始时间
 64     m_startTime =  secOffset % TimeRestoreHeart;
 65
 66     if (m_startTime <= 0)
 67     {
 68         UserData::shared()->setHeart(UserData::shared()->getHeart() + 1);
 69         showHeartTime();
 70         log("---- silent ---- LevelMapScrollView :: updateTimeOneHeart : curSec,endSec,Offsec,startTime,heart : %d, %d, %d, %d, %d" , secTotal, endSec, secOffset, m_startTime, UserData::shared()->getHeart());
 71         return;
 72     }
 73
 74     showHeartTime();
 75
 76 }
 77
 78
 79 void LevelMapScrollView::showHeartTime()
 80 {
 81     int nHeartNum = UserData::shared()->getHeart();
 82     m_pHeartCountFont->setString(std::to_string(nHeartNum));
 83     if (nHeartNum >= 10)
 84     {
 85         m_pHeartTimeFont->setString("Max");
 86     }
 87     else if (nHeartNum > 5)
 88     {
 89         m_pHeartTimeFont->setString("");
 90     }
 91     else
 92     {
 93         int secTemp = TimeRestoreHeart;
 94         if (0 != m_startTime)
 95         {
 96             secTemp = m_startTime;
 97         }
 98         char strSec[10] = { 0 };
 99         sprintf(strSec, "%02d:%02d", secTemp / 60, secTemp % 60);
100         m_pHeartTimeFont->setString(strSec);
101     }
102 }

结果展示:

转载于:https://www.cnblogs.com/dudu580231/p/5670021.html

【乐畅】工作积累 ---- 后台倒计时 ( 体力恢复功能 )相关推荐

  1. Android 后台杀死及恢复的机制

    App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity+Fragment的时候,经常会遇 ...

  2. php之工作积累 (一)

    php之工作积累 (一) 前言:在每天的工作中都能看到不少新东西,遇到这种情况我都是百度一下,然后记到记事本上以备不时之需,然而昨晚电脑突然死机让我感觉这样不太靠谱,如果这些都没了,那我最近的积累就都 ...

  3. 工作积累(五)——使用spring@Value注解实现常量功能

    之前的博客中提到过如何通过 java.util.ResourceBundle 和 java.util.Properties 类通过读取 key-value 文件的形式实现常量功能.其实 spring ...

  4. Android app 后台被杀恢复

    android 模拟应用因内存不足被后台杀死命令 https://www.jianshu.com/p/effb4546b9aa adb shell am kill-all  应用通过home键已经停留 ...

  5. 工作积累⑨——从丁香医生增长看地推的重要性

    工作总结系列目录: 工作总结③--数据分析师到底该如何分析? 工作积累⑥--从留存下降看小红书的精细化运营 工作积累⑦--从新零售和漏斗模型解读亚马逊增长策略 工作积累⑧--从星巴克送外卖看新零售的线 ...

  6. 王乐畅草书签名怎么写

    导读:今天来给大家分享[王乐畅草书签名怎么写]有叫这个名字的人可以来看看了! 一.学习签名首先是要决定是写在哪些地方; (1)用在普通的场合,想要一个比较独特的签名; 在这种时候,想要一个与众不同的签 ...

  7. 工作积累⑦——从新零售和漏斗模型解读亚马逊增长策略

    工作总结系列目录: 工作总结③--数据分析师到底该如何分析? 工作积累⑥--从留存下降看小红书的精细化运营 工作积累⑧--从星巴克送外卖看新零售的线下战争 工作积累⑨--从丁香医生增长看地推的重要性 ...

  8. 511遇见易语言乐玩插件多线程后台绑定-方法2

    本课视频和第13课的区别是,在获取所有游戏窗口句柄上,我们采用了乐玩插件的枚举窗口EnumWindow命令,第13课采用了API进程_取ID数组和进程_取ID数组. 乐玩插件多线程绑定源码: .版本 ...

  9. excel工作表删除了怎么恢复

    excel工作表删除了怎么恢复?Excel是一种常用的办公软件,特别是在数据处理.数据分析以及图表制作等方面经常被使用.但是,如果你不小心删除了Excel工作表或者因为Excel出现故障导致工作表不见 ...

最新文章

  1. Mqtt paho 回调函数触发机制跟踪
  2. ABAP简介以及OpenSQL与NativeSQL的区别
  3. WAI-ARIA和屏幕阅读器
  4. protel99se 问题汇总(不定期更新)
  5. 系列10—消息中间件
  6. Hbase总结(四)- Hbase与传统数据库的区别
  7. linux文件共享之samba,nfs的搭建
  8. jinfo java_Java自带的JVM性能监控及调优工具(jps、jinfo、jstat、jmap、javap)使用介...
  9. WWF全球河流数据HydroRIVERS
  10. 特网云 DirectAdmin 安装SSL
  11. 历练熟女给老实木讷男孩的恋爱建议(转贴)
  12. 使用FastDeploy在英特尔CPU和独立显卡上端到端高效部署AI模型
  13. 【数据库】多表查询二----嵌套查询(子查询)
  14. 2011-2019 历届蓝桥杯——本科B组C/C++组别所有试题——详解大全
  15. 电机的反电动势了解及步进电机的基本特性
  16. ODBC方式与OCI方式对比
  17. 军犬舆情每日热点:LIGO发现最大黑洞;智能锁广告侮辱拆弹战士
  18. 伺服驱动器生产文件_伺服驱动器程序源代码 程序源代码文件
  19. linux 渗透工具_适用于Linux的十大最佳渗透测试工具
  20. CF-Kate and imperfection

热门文章

  1. error starting container: API error (404): network fabric_test not found“
  2. 国美“曲线救国”:国美快递能撑起“真快乐”的零售帝国吗?
  3. 炉石传说服务器维护时间2020,炉石传说新版本2020上线时间 炉石传说新版本上线时间介绍...
  4. VMware ESX轻松搞定物理机的虚拟化,充分利用自己的物理机
  5. 用Python写了个金融数据爬虫,半小时干了全组一周的工作量
  6. 阿里云HPC助力新制造 | 上汽仿真计算云SSCC 1
  7. PTA 6-3 舞伴问题 (20 分) C语言
  8. 大雁魔三阶[大烟头]
  9. 【NOIP2010】【Luogu1199】三国游戏
  10. 迅雷7优化,删除组件,去广告,屏蔽上传,高速通道,下载