unity 之体力倒计时

34 篇文章 0 订阅

uint ItemData.Ins.resource.GardenTaskNumTime 体力更新时间
uint ItemData.Ins.resource.GardenTaskNum 剩余体力值
float GardenTaskData.Ins.unix 当前本地时间 减去体力更新时间
uint _taskNum;需要回复的体力值= GardenTaskData.Ins.unix/每一个体力恢复需要的时间
ILBridge.Ins.onUpdate Update 委托事件 也可以做成计时器形式 最好每秒执行一次
假如 最大体力值 是200 每五分钟恢复一点体力值 也就是 300秒恢复一点
Text _txtTechtime 用来显示恢复体力 的文本组件

 void SetTime ()
        {
            if ( ItemData.Ins.resource.GardenTaskNumTime != 0 && ItemData.Ins.resource.GardenTaskNum < 200 )
            {
                GardenTaskData.Ins.unix = ItemData.Ins.GetCurrentTimeUnix () - ItemData.Ins.resource.GardenTaskNumTime;
                if ( GardenTaskData.Ins.unix > 300 )
                {
                    _taskNum = ( uint ) GardenTaskData.Ins.unix / 300;
                    ItemData.Ins.resource.GardenTaskNum += _taskNum;
                    if ( ItemData.Ins.resource.GardenTaskNum >= 200 )
                    {
                        ItemData.Ins.resource.GardenTaskNum = 200;
                    }
                    else
                    {
                        GardenTaskData.Ins.unix -= ( _taskNum * 300 );
                        ILBridge.Ins.onUpdate += ToRecoverTili;
                    }
                }
                else
                {
                    ILBridge.Ins.onUpdate += ToRecoverTili;
                }
            }
            _txtTechtime.text = $"{ItemData.Ins.resource.GardenTaskNum}/{200}";
        }
         private void ToRecoverTili ()
        {
            GardenTaskData.Ins.unix += Time.deltaTime;
            if ( GardenTaskData.Ins.unix > 300 )
            {
                ItemData.Ins.resource.GardenTaskNum += 1;
                GardenTaskData.Ins.unix -= 300;
                _txtTechtime.text = $"{ItemData.Ins.resource.GardenTaskNum}/{200}";
            }
            if ( ItemData.Ins.resource.GardenTaskNum >= 200 )
            {
                ItemData.Ins.resource.GardenTaskNum = 200;
                ILBridge.Ins.onUpdate -= ToRecoverTili;//这里恢复满了 关闭计时器
                _txtTechtime.text = $"{ItemData.Ins.resource.GardenTaskNum}/{200}";
            }
        }

如果要显示这种形式

 public class GardenTaskBuyNumView : AView
    {
        /// <summary>
        /// 下次体力恢复时间
        /// </summary>
        [AttComInfo("TextNextTili")]
        Text _textNextTili;

        /// <summary>
        /// 全部体力恢复时间
        /// </summary>
        [AttComInfo("TextAllTili")]
        Text _textAllTili;

        /// <summary>
        /// 今日可购买体力次数
        /// </summary>
        [AttComInfo("TextCanBuy")]
        Text _textCanBuy;

        float _time = 0;
        private VipConfigVO _cfg;
        /// <summary>
        /// 可购买次数
        /// </summary>
        long num;
        //初始化s
        protected override void OnInit (object data)
        {
            base.OnInit (data);
            _cfg = GameManageHub.Ins.GameConfigMgr.VipConfig.GetMap () [( int ) ItemData.Ins.vipthislevel + 1];
            num = _cfg.gardenTaskBuytimes - ItemData.Ins.resource.GardenTaskBuyNum;
            if ( ItemData.Ins.resource.GardenTaskNumTime != 0 && ItemData.Ins.resource.GardenTaskNum < 200 )
            {
                _textNextTili.text = SetTime (300 - GardenTaskData.Ins.unix % 300);
                float num = (200- ItemData.Ins.resource.GardenTaskNum ) * 300 - GardenTaskData.Ins.unix;
                _textAllTili.text = SetTime (num);
            }
            else
            {
                _textNextTili.text = "00:00:00";
                _textAllTili.text = "00:00:00";
            }
            _textCanBuy.text = num  + CharTable.GetChinese (275);
            ILBridge.Ins.onUpdate += ShowTiliInfo;
        }

        private void ShowTiliInfo ()
        {
            _time += Time.deltaTime;
            if ( _time > 1 )
            {
                float num = ( 200 - ItemData.Ins.resource.GardenTaskNum ) * 300 - GardenTaskData.Ins.unix;
                if ( num <= 0 )
                {
                    _textNextTili.text = "00:00:00";
                    _textAllTili.text = "00:00:00";
                }
                else
                {
                    _textNextTili.text = SetTime (300 - GardenTaskData.Ins.unix % 300);
                    _textAllTili.text = SetTime (num);
                }
            }
        }

       
        private string SetTime(float unix)
        {
            int h = 0;
            int m = 0;
            int s = 0;
            h = (int)unix / 3600;
            unix -= h * 3600;
            m = ( int ) unix / 60;
            unix -= m * 60;
            s = ( int ) unix % 60;
            return SetTimeString (h) + ":" + SetTimeString (m) + ":" + SetTimeString (s);
        }
        private string SetTimeString(int num)
        {
            if ( num < 10 )
            {
                return "0" + num;
            }
            else
            {
                return num.ToString ();
            }
        }
       
        protected override void OnDisable ()
        {
            base.OnDisable ();
            ILBridge.Ins.onUpdate -= ShowTiliInfo;

        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值