【问题标题】:Timer Goes Negative计时器变为负数
【发布时间】:2022-01-22 00:26:21
【问题描述】:

我的计时器出现问题。问题是,计时器在达到指定的时间限制后变为负数,并且下一个级别永远不会解锁。仅当我将时间跨度更改为 24 小时时才会发生这种情况。当我使用秒或分钟时,计时器在达到零 (0) 时停止并使按钮再次可交互。 我也测试了 1 小时,效果很好。

IEnumerator TimeUpdate()
{
    if (bonus != null)
    {
            if (PlayerPrefs.GetInt("Bonus", 0) == 0)
            {
                bonus.interactable = true;
                showTimer.gameObject.SetActive(false);
                PlayerPrefs.SetString("BONUS_END_TIME", "");

                StopAllCoroutines();
            }
            else
            {
                bonus.interactable = false;
                showTimer.gameObject.SetActive(true);
            }
        
    }

    while (true)
    {
        chkbonustime();

        DateTime dt = DateTime.Now;

        string bonusendtime = PlayerPrefs.GetString("BONUS_END_TIME", "");
        DateTime dateComplete;

        if (bonusendtime != null)
        {
            dateComplete = DateTime.Parse(bonusendtime);
            DateTime ENDTIME = dateComplete.Add(TimeSpan.FromHours(24));

            TimeSpan ABC = ENDTIME - dt;

            showTimer.text = ABC.Hours + " : " + ABC.Minutes + " : " + ABC.Seconds;
        }
         
        // Debug.Log();

        yield return new WaitForSeconds(1);
    }
}

public void chkbonustime()
{

    string bonusendtime = PlayerPrefs.GetString("BONUS_END_TIME", "");

    if (!bonusendtime.Equals(""))
    {
        DateTime dateComplete = DateTime.Parse(bonusendtime);
        DateTime xyz = DateTime.Now;

        TimeSpan timespan = xyz - dateComplete;
        Debug.Log(timespan.Seconds);
        if (timespan.Hours >= 24)
        {
            // if (PlayerPrefs.GetInt("Bonus", 0) == 1)
            // {
            PlayerPrefs.SetInt("Bonus", 0);
            bonus.interactable = true;
            showTimer.gameObject.SetActive(false);
            PlayerPrefs.SetString("BONUS_END_TIME", "");

            StopAllCoroutines();
            //  }
            //  else
            // {
            //     bonus.interactable = false;
            //     showTimer.gameObject.SetActive(true);
            // }
        }
        //else
        //  return false;
        // PlayerPrefs.SetString("BONUS_END_TIME", "");
    }
    else
    {

        // return false;
    }
}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    Hours 仅介于 0-23 之间,您可能需要 TotalHours 或 TotalDays。

    【讨论】:

    • 知道了。所以我的代码看起来像这样,'code' if (timespan.Totalhours>=24) { //do something } 但是这行代码可以吗,还是我也必须在这里更改任何内容? 'code' DateTime ENDTIME = dateComplete.Add(TimeSpan.FromHours(24));
    • FromDays(1) 似乎更容易理解,如果你正在处理天,但是 FromHours(24) 也可以工作......除非你的时区处理 DST stackoverflow.com/questions/47160663/…
    猜你喜欢
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多