【乐畅】工作积累 ---- 后台倒计时 ( 体力恢复功能 )
2016-07-14 12:30
267 查看
功能需求:
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. 需要实现倒计时功能,在屏幕上显示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
void LevelMapScrollView::timeHeartLabel() { /* * 判断是否满心 * 是否显示倒计时 * */ // 当时时间(秒) // 满心的时间 // 间隔时间 int secTotal = time(0); int endSec = readTimeHeart(); int secOffset = endSec - secTotal; // 满 心 if (secOffset <= 0) { int heartNum = UserData::shared()->getHeart(); if (heartNum < 10) { UserData::shared()->setHeart(10); } showHeartTime(); saveTimeHeart(secTotal); unschedule(schedule_selector(LevelMapScrollView::updateTimeOneHeart)); return; } // 当前需要恢复的心 int nrestoreHeart = secOffset / TimeRestoreHeart + 1; UserData::shared()->setHeart(10 - nrestoreHeart); // 倒计时 初始时间 m_startTime = secOffset % TimeRestoreHeart; log("---- silent ---- LevelMapScrollView :: timeHeartLabel : curSec,endSec,Offsec,startTime : %d, %d, %d, %d" , secTotal, endSec, secOffset, m_startTime); showHeartTime(); schedule(schedule_selector(LevelMapScrollView::updateTimeOneHeart), 1.0f); } void LevelMapScrollView::updateTimeOneHeart( float dt ) { // 当时时间(秒) int secTotal = time(0); // 满心的时间 int endSec = readTimeHeart(); int secOffset = endSec - secTotal; // 满 心 if (secOffset <= 0) { int heartNum = UserData::shared()->getHeart(); if (heartNum < 10) { UserData::shared()->setHeart(10); } showHeartTime(); saveTimeHeart(secTotal); unschedule(schedule_selector(LevelMapScrollView::updateTimeOneHeart)); log("---- silent ---- LevelMapScrollView :: updateTimeOneHeart : curSec,endSec,Offsec,startTime,heart : %d, %d, %d, %d, %d" , secTotal, endSec, secOffset, m_startTime, UserData::shared()->getHeart()); return; } // 倒计时 初始时间 m_startTime = secOffset % TimeRestoreHeart; if (m_startTime <= 0) { UserData::shared()->setHeart(UserData::shared()->getHeart() + 1); showHeartTime(); log("---- silent ---- LevelMapScrollView :: updateTimeOneHeart : curSec,endSec,Offsec,startTime,heart : %d, %d, %d, %d, %d" , secTotal, endSec, secOffset, m_startTime, UserData::shared()->getHeart()); return; } showHeartTime(); } void LevelMapScrollView::showHeartTime() { int nHeartNum = UserData::shared()->getHeart(); m_pHeartCountFont->setString(std::to_string(nHeartNum)); if (nHeartNum >= 10) { m_pHeartTimeFont->setString("Max"); } else if (nHeartNum > 5) { m_pHeartTimeFont->setString(""); } else { int secTemp = TimeRestoreHeart; if (0 != m_startTime) { secTemp = m_startTime; } char strSec[10] = { 0 }; sprintf(strSec, "%02d:%02d", secTemp / 60, secTemp % 60); m_pHeartTimeFont->setString(strSec); } }
结果展示:
相关文章推荐
- ACM:平衡树(3)——另一个Splay
- SSH框架下中文字符乱码问题的研究
- R函数-letters()、month.name()等几个内置函数
- NAT原理与NAT穿越
- linux 监控系统资源-内存
- sphinx 配置文件全解析
- servlet中的相对路径和绝对路径的使用
- JAVA中写时复制(Copy-On-Write)Map实现
- Ros学习之---URDF
- ubuntu14.04 apache2+python cgi安装与配置
- vagrant使用资料
- 死锁
- 开启博客之旅
- mac OS 使用技巧
- php的引用
- 浅谈HTTP中Get与Post的区别
- NOIP 2011 选择客栈
- 20160611-20160714springmvc入门进阶
- shell学习-7
- hibernate_validator_07