【乐畅】工作积累 ---- 后台倒计时 ( 体力恢复功能 )
功能需求:
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
【乐畅】工作积累 ---- 后台倒计时 ( 体力恢复功能 )相关推荐
- Android 后台杀死及恢复的机制
App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity+Fragment的时候,经常会遇 ...
- php之工作积累 (一)
php之工作积累 (一) 前言:在每天的工作中都能看到不少新东西,遇到这种情况我都是百度一下,然后记到记事本上以备不时之需,然而昨晚电脑突然死机让我感觉这样不太靠谱,如果这些都没了,那我最近的积累就都 ...
- 工作积累(五)——使用spring@Value注解实现常量功能
之前的博客中提到过如何通过 java.util.ResourceBundle 和 java.util.Properties 类通过读取 key-value 文件的形式实现常量功能.其实 spring ...
- Android app 后台被杀恢复
android 模拟应用因内存不足被后台杀死命令 https://www.jianshu.com/p/effb4546b9aa adb shell am kill-all 应用通过home键已经停留 ...
- 工作积累⑨——从丁香医生增长看地推的重要性
工作总结系列目录: 工作总结③--数据分析师到底该如何分析? 工作积累⑥--从留存下降看小红书的精细化运营 工作积累⑦--从新零售和漏斗模型解读亚马逊增长策略 工作积累⑧--从星巴克送外卖看新零售的线 ...
- 王乐畅草书签名怎么写
导读:今天来给大家分享[王乐畅草书签名怎么写]有叫这个名字的人可以来看看了! 一.学习签名首先是要决定是写在哪些地方; (1)用在普通的场合,想要一个比较独特的签名; 在这种时候,想要一个与众不同的签 ...
- 工作积累⑦——从新零售和漏斗模型解读亚马逊增长策略
工作总结系列目录: 工作总结③--数据分析师到底该如何分析? 工作积累⑥--从留存下降看小红书的精细化运营 工作积累⑧--从星巴克送外卖看新零售的线下战争 工作积累⑨--从丁香医生增长看地推的重要性 ...
- 511遇见易语言乐玩插件多线程后台绑定-方法2
本课视频和第13课的区别是,在获取所有游戏窗口句柄上,我们采用了乐玩插件的枚举窗口EnumWindow命令,第13课采用了API进程_取ID数组和进程_取ID数组. 乐玩插件多线程绑定源码: .版本 ...
- excel工作表删除了怎么恢复
excel工作表删除了怎么恢复?Excel是一种常用的办公软件,特别是在数据处理.数据分析以及图表制作等方面经常被使用.但是,如果你不小心删除了Excel工作表或者因为Excel出现故障导致工作表不见 ...
最新文章
- Mqtt paho 回调函数触发机制跟踪
- ABAP简介以及OpenSQL与NativeSQL的区别
- WAI-ARIA和屏幕阅读器
- protel99se 问题汇总(不定期更新)
- 系列10—消息中间件
- Hbase总结(四)- Hbase与传统数据库的区别
- linux文件共享之samba,nfs的搭建
- jinfo java_Java自带的JVM性能监控及调优工具(jps、jinfo、jstat、jmap、javap)使用介...
- WWF全球河流数据HydroRIVERS
- 特网云 DirectAdmin 安装SSL
- 历练熟女给老实木讷男孩的恋爱建议(转贴)
- 使用FastDeploy在英特尔CPU和独立显卡上端到端高效部署AI模型
- 【数据库】多表查询二----嵌套查询(子查询)
- 2011-2019 历届蓝桥杯——本科B组C/C++组别所有试题——详解大全
- 电机的反电动势了解及步进电机的基本特性
- ODBC方式与OCI方式对比
- 军犬舆情每日热点:LIGO发现最大黑洞;智能锁广告侮辱拆弹战士
- 伺服驱动器生产文件_伺服驱动器程序源代码 程序源代码文件
- linux 渗透工具_适用于Linux的十大最佳渗透测试工具
- CF-Kate and imperfection
热门文章
- error starting container: API error (404): network fabric_test not found“
- 国美“曲线救国”:国美快递能撑起“真快乐”的零售帝国吗?
- 炉石传说服务器维护时间2020,炉石传说新版本2020上线时间 炉石传说新版本上线时间介绍...
- VMware ESX轻松搞定物理机的虚拟化,充分利用自己的物理机
- 用Python写了个金融数据爬虫,半小时干了全组一周的工作量
- 阿里云HPC助力新制造 | 上汽仿真计算云SSCC 1
- PTA 6-3 舞伴问题 (20 分) C语言
- 大雁魔三阶[大烟头]
- 【NOIP2010】【Luogu1199】三国游戏
- 迅雷7优化,删除组件,去广告,屏蔽上传,高速通道,下载