【问题标题】:Is there a preferred way to get the system time in cocos2d-x?在 cocos2d-x 中获取系统时间是否有首选方法?
【发布时间】:2013-12-27 21:12:08
【问题描述】:

我正在用 Cocos2d-x 编写一个跨平台的应用程序。我需要时间来创建一个倒计时时钟到一天中的某个时间。由于它是在 C++ 中,如果需要,我可以使用 time(...)、mktime(...) 和 difftime(...) 作为直接方法。

在 Cocos2d-x 中是否有一个首选的方法可以跨平台(即直接内置在框架中)?我希望该应用在 iPhone、iPad 和 Android 上都能正常运行。

【问题讨论】:

    标签: android cocos2d-x cocos2d-x-3.0


    【解决方案1】:

    你可以在时钟类中shduleUpdate。

    带有浮点参数的更新调用,它是最后一次调用后以秒为单位的增量时间,此方法每帧调用一次,cocos2d-x 从系统获取时间并计算增量。

    【讨论】:

    • 谢谢。虽然这是真的,但问题不在于安排“检查时间”,而在于如何执行时间请求本身。例如,在 Objective-C 中,有一个 NSDate 类仅用于处理日期/时间。 C# 中有一个 DateTime 类用于处理时间。 cocos2d-x 里面有没有等价的东西?
    【解决方案2】:

    试试这个代码

    static inline long millisecondNow()
    {
        struct cc_timeval now;
        CCTime::gettimeofdayCocos2d(&now, NULL);
        return (now.tv_sec * 1000 + now.tv_usec / 1000);
    }
    

    我使用这个函数来获取当前时间(以毫秒为单位)。我是 cocos2d-x 的新手,希望对您有所帮助。

    【讨论】:

    • 这似乎接近我正在寻找的。我会尝试并提供反馈。谢谢。
    【解决方案3】:

    我认为这段代码可以解决问题:

    静态内联长毫秒Now() { 现在构造 cc_timeval; CCTime::gettimeofdayCocos2d(&now, NULL); 返回(now.tv_sec * 1000 + now.tv_usec / 1000); }

    但是,只提供了我需要的一部分。一般来说,我需要一个真正的“日期和时间”对象(或结构),而不仅仅是以毫秒为单位的时间。

    目前最好的解决方案似乎是在 C++ 中使用“经典”本地时间、mktime、difftime 三重奏。我在下面有一些基本操作的示例......我可能会编写一个通用类来执行这些操作,但现在,这些是一个好的开始,并展示了如何开始:

    double Utilities::SecondsTill(int hour, int minute)
    {
       time_t now;
       struct tm target;
       double seconds;
    
       time(&now);  
    
       target = *localtime(&now);
    
       target.tm_hour = hour;
       target.tm_min = minute;
       target.tm_sec = 0;
    
       seconds = difftime(mktime(&target),now);
    
       return seconds;
    }
    
    DAYS_OF_WEEK_T Utilities::GetDayOfWeek()
    {
       struct tm tinfo;
       time_t rawtime;
       time (&rawtime);
    
       tinfo = *localtime(&rawtime);
    
       return (DAYS_OF_WEEK_T)tinfo.tm_wday;
    }
    

    【讨论】:

      【解决方案4】:

      你应该试试这个库,我刚刚测试过,它工作正常。

      https://github.com/Ghost233/CCDate

      如果你收到一些错误的值,设置 timezoneOffset = 0;

      注意:0

      【讨论】:

        【解决方案5】:

        试试这个:

        time_t rawtime;
        struct tm * timeinfo;
        time (&rawtime);
        timeinfo = localtime (&rawtime);
        
        CCLog("year------->%04d",timeinfo->tm_year+1900);
        CCLog("month------->%02d",timeinfo->tm_mon+1);
        CCLog("day------->%02d",timeinfo->tm_mday);
        
        CCLog("hour------->%02d",timeinfo->tm_hour);
        CCLog("minutes------->%02d",timeinfo->tm_min);
        CCLog("seconds------->%02d",timeinfo->tm_sec);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多