以6分钟恢复1体力 满体力是100为例子

注释: (int) SaveData._instance.PS为专门存储数据的类里边的体力

存储时间的对象TIME类

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TIME
{public int year { get; set; }public int  month { get; set; }public int  day { get; set; }public int  hour { get; set; }public int  minute { get; set; }public int  second { get; set; }public TIME(int year,  int  month, int  day, int  hour, int minute, int  second){this.year = year;this.month = month;this.day = day;this.hour = hour;this.minute = minute;this.second = second;}}

游戏体力的计算的逻辑 随便挂载一个空物体上

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class code : MonoBehaviour
{//游戏里保存的时间TIME saveTime;//现在的时间TIME nowTime;// private  int SP;public Text waitRecoverTimeText;//主界面体力倒计时的textprivate void Awake(){nowTime = new TIME(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);saveTime = nowTime;//先构造出来两个时间的实例对象 然后在改变GetTheTime();//改变saveTime}private void Start(){StartCoroutine(ChangeTimeAndSP());//开始调用携程}private void Update(){if (SaveData._instance.PS >= 100) { print("SP"+ SaveData._instance.PS);  print("隐藏"); waitRecoverTimeText.gameObject.SetActive(false); }//根据提示是否满控制倒计时text是否显示的方法else if (SaveData._instance.PS < 100) { print("显示"); waitRecoverTimeText.gameObject.SetActive(true); }}void SaveTheTime()//存储时间的方法  把现在的时间存储进去  todo 玩家进入关卡之后调用{PlayerPrefs.SetInt("Year", nowTime.year);PlayerPrefs.SetInt("Month", nowTime.month);PlayerPrefs.SetInt("Day", nowTime.day );PlayerPrefs.SetInt("Hour", nowTime.hour);PlayerPrefs.SetInt("Minute", nowTime.minute);PlayerPrefs.SetInt("Second", nowTime.second );}void GetTheTime()//读取时间的方法 获取到上一次体力开始消耗时候的时间{//     print( "是否有key:" +PlayerPrefs.HasKey("Year") );saveTime.year  = PlayerPrefs.GetInt("Year", DateTime.Now.Year);saveTime.month = PlayerPrefs.GetInt("Month", DateTime.Now.Month);saveTime.day = PlayerPrefs.GetInt("Day", DateTime.Now.Day);saveTime.hour = PlayerPrefs.GetInt("Hour", DateTime.Now.Hour);saveTime.minute = PlayerPrefs.GetInt("Minute", DateTime.Now.Minute);saveTime.second = PlayerPrefs.GetInt("Second", DateTime.Now.Second);print("成功获取到存储的时间 为" + saveTime.year + "年" + saveTime.month + "月" + saveTime.day  + "日" + saveTime.hour  + "时" + saveTime.minute + "分" + saveTime.second  + "秒");}IEnumerator  ChangeTimeAndSP(){//1 获取到现在的时间nowTime = new TIME(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);//1.1   判断是否目前时间比存储的时间 日期靠后bool isRun = false;if (nowTime.year > saveTime.year)//如果年数靠后的话 就不在进行判断了 直接去执行下边的逻辑了{{ isRun = true; goto mylable; }}if (nowTime.month  > saveTime.month )//月{{ isRun = true; goto mylable; }}if (nowTime.day  > saveTime.day )//日{{ isRun = true; goto mylable; }}if (nowTime.hour  > saveTime.hour )//时{{ isRun = true; goto mylable; }}if (nowTime.minute  > saveTime.minute )//分{{ isRun = true; goto mylable; }}if (nowTime.second  > saveTime.second )//秒{{ isRun = true;}}mylable:int theSecond = -1;//存储恢复体力需要的秒数if (isRun == true)//如果现在的时间确定比已经存储的时间靠后 进行正常操作{//2 获取到  现在的时间与存储器里边的时间 相差的秒的数量int secondDiffence = nowTime.second - saveTime.second;int minuteDiffence = nowTime.minute - saveTime.minute;int hourDiffence = nowTime.hour - saveTime.hour;int dayDiffence = nowTime.day - saveTime.day;int monthDiffence = nowTime.month - saveTime.month;int yearDiffence = nowTime.year  - saveTime.year;int theSecondLerp = secondDiffence + minuteDiffence * 60 + hourDiffence * 60 * 60 + dayDiffence * 60 * 60 * 24 + monthDiffence * 60 * 60 * 24 * 30+ yearDiffence*12 * 60 * 60 * 24 * 30;//3如果体力不满的时候if (SaveData._instance.PS < 100)//如果体力不满的话{waitRecoverTimeText.gameObject.SetActive(true); //显示textfor (; theSecondLerp >= 300; theSecondLerp -= 300)//如果秒数不够 跳出循环  每隔300秒加1体力{SaveData._instance.PS++;SaveTheTime();GetTheTime();if (SaveData._instance.PS >= 100) { break; }               //如果体力满了 跳出循环}}else { SaveTheTime();  }theSecond = theSecondLerp;}else//是玩家调整了系统日期 重新把当前世界存储为savetime {SaveTheTime();GetTheTime();}yield return new WaitForSeconds(1.0f);ChangeMainScenceText(theSecond);//更新倒计时text的方法StartCoroutine(ChangeTimeAndSP());//递归携程}void ChangeMainScenceText(int second)//更新主页的倒计时text 的方法{if (second <= 0) {  return; }//安全校验 int minuteCount = 0;//倒计时里边的分钟的数字int secondCount;//倒计时里边的秒钟的数字for (; second>=60; second-=60)//通过循环获取到剩余的分钟数量{minuteCount++;}secondCount = second;//text的显示:if (secondCount >50) { waitRecoverTimeText.text = (5- minuteCount).ToString() + ":0" + (60- secondCount).ToString(); }else { waitRecoverTimeText.text = (5 - minuteCount).ToString() + ":" + (60 - secondCount).ToString(); }}
}

单机游戏体力恢复的思路相关推荐

  1. 制作单机游戏体力系统

    做单机游戏的时候,制作人突然提了一个"体力系统"的需求.目前的很多游戏无论是网游还是单机,都有体力系统,我想可能是因为平衡玩家而限制游戏玩法或者是怕玩家无限制的玩游戏疲惫的原因吧. ...

  2. cocos creator JS 实现微信小游戏体力倒计时恢复的代码

    写微信小游戏时写的,功能可能还有待改进.目前这里只是在逻辑层获取了当前的系统时间,所以离开页面倒计时会停止(所以想要完成场景跳转之后仍在继续倒计时的功能,必须在逻辑层取回离开某个场景时的时间来做条件运 ...

  3. Unity 休闲游戏体力值恢复

    1.做休闲游戏实现一个体力恢复的功能,当游戏退出离线的时候,体力值也是恢复的,这个时候就需要计算游戏离线了多久. 2.作为测试 我脚本中的R和A分别可以增加体力和减少体力. 3.即使游戏退出,下次进入 ...

  4. PHP+Redis实现游戏体力值加减及自动恢复的操作

    在开发小游戏项目时,有时需要服务端来操作用户的体力.如果使用数据库来保存略显冗余,性能也稍有不足,所有使用Redis的过期机制可以更好更快的快速实现需求. 示例中的Redis经过了多例的封装 参照 多 ...

  5. 【乐畅】工作积累 ---- 后台倒计时 ( 体力恢复功能 )

    功能需求: 1. 需要实现倒计时功能,在屏幕上显示00:00格式的倒计时时间 2. 跳转到别的页面中,也需要在后台倒计时来恢复体力 3. 游戏关闭后,再次进入的时候在指定页面中显示倒计时时间和剩余体力 ...

  6. 轻操作动作休闲单机游戏《狂斩三国2》评测

    游戏类别:动作休闲单机游戏 时隔一年,曾在国内和台湾手游市 场获得top1佳绩的<狂斩三国>再度归来!其策略加动作的独特玩法在当时颠覆了玩家们对三国游戏的阵营认知.比传统策略更简单明快,比 ...

  7. Android逆向笔记-单机游戏通过配置文件修改技能等

    此处只说明思路,不举具体的例子,避免CSDN审核不通过. 在安卓单机游戏中,要注意asserts/data文件夹下,此处有大量的xml文件.可以用字符串搜索. 这里的skills就存储了技能,stor ...

  8. tgp饥荒 服务器无响应,饥荒TGP版常见运行问题有哪些_TGP版礼包领取及邀请添加好友方法详解_快吧单机游戏...

    <饥荒>TGP版常见运行问题有哪些呢,玩家们是不是很想知道呢?下面小编为玩家们带来了<饥荒>TGP版礼包领取及邀请添加好友方法详解,还不知道的玩家快来看看吧. 1.皮肤礼包如何 ...

  9. 用文件保存游戏服务器数据恢复,玩植物大战僵尸等单机游戏时,存档丢失了怎么数据恢复?...

    相信很多人在玩例如植物大战僵尸.使命召唤等游戏时,都遇到到因为游戏奔溃,导致之前的存档丢失的情况.那么这种情况下,这些存档能够找回吗?首先我们要知道,存档在电脑上找不到,并不意味着这些存档的数据消失了 ...

最新文章

  1. Keras K.switch()用法
  2. 官方版下载_药店大学app官方版下载
  3. SAP Marketing Cloud功能简述(一)Contacts和Profiles
  4. Power BI 将商业智能数据转换为数据理解
  5. 德州计算机速成班培训,德州办公软件培训速成班
  6. Failed to start component [StandardEngine[Catalina].StandardHost[localhost].错误解决方案
  7. MySQL 主键相关操作
  8. win10安装pyhive包
  9. java 基础 ppt_《Java基础入门》PPT_传智播客.rar
  10. java获取oracle自增_Oracle自增列创建方法
  11. Sentinel-2(哨兵2号)数据下载及预处理
  12. 赛微微电子通过注册:拟募资8亿 年营收3.4亿
  13. 访问者模式的java语言_Java 设计模式系列(二三)访问者模式(Vistor)
  14. html3D效果可以在手机打开吗,HTML手机怎么打开
  15. Solaris IPMP两种配置方法
  16. C语言《位段结构体、联合体》
  17. 关于mos管的压降问题(项目遇到问题总结)
  18. SpringBoot(使用jsp时对idea进行配置)
  19. 基于Python机器学习实现的花卉识别
  20. 第十章 Lambda 表达式

热门文章

  1. 一瓶汽水1块钱,3个瓶盖换一瓶汽水,2个空瓶换一瓶汽水,假如手里有5块钱,能喝多少瓶汽水
  2. 为什么你使用程序化自动交易接口没有赚到钱?
  3. C语言N个数内的奇数和/偶数和
  4. mac cmd 打开访达
  5. 关于小报童的源起:人们更愿意追随一个活生生的人,而非一个公司。
  6. BES-DBQ蓝牙协议认证测试
  7. 罗永浩退出聊天宝股东行列 实际控制人变更为王威
  8. 嵌入式系统硬件设计与实践(开发过程)
  9. SCCM 2012 R2实战系列之一:SQL安装
  10. C盘清理小技巧(.dll顽固插件清理方法)