我正在用 Cocos2d-x 编写一个跨平台的应用程序。我需要时间来创建一个倒计时时钟到一天中的某个时间。由于它是在 C++ 中,如果我需要作为直接方法,我可以使用 time(...)、mktime(...) 和 difftime(...)。
Cocos2d-x 中是否有一种首选方法可以跨平台执行此操作(即直接内置到框架中的东西)?我希望该应用程序在 iPhone、iPad 和 Android 上都能正常工作。
我正在用 Cocos2d-x 编写一个跨平台的应用程序。我需要时间来创建一个倒计时时钟到一天中的某个时间。由于它是在 C++ 中,如果我需要作为直接方法,我可以使用 time(...)、mktime(...) 和 difftime(...)。
Cocos2d-x 中是否有一种首选方法可以跨平台执行此操作(即直接内置到框架中的东西)?我希望该应用程序在 iPhone、iPad 和 Android 上都能正常工作。
尝试这个:
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);
试试这个代码
static inline long millisecondNow()
{
struct cc_timeval now;
CCTime::gettimeofdayCocos2d(&now, NULL);
return (now.tv_sec * 1000 + now.tv_usec / 1000);
}
我使用此函数以毫秒为单位获取当前时间。我是 cocos2d-x 的新手,所以希望这会有所帮助。
你应该试试这个库,我刚刚测试过,它工作正常。
https://github.com/Ghost233/CCDate
如果您收到一些错误的值,请设置 timezoneOffset = 0;
注意:0 <= 月 <= 11
您可以在时钟类中进行 sheduleUpdate。
带有浮点参数的更新调用,它是上次调用后以秒为单位的增量时间,此方法每帧调用一次,cocos2d-x 从系统获取时间并计算增量。
我认为这段代码可以解决问题:
static inline long millisecondNow() { struct cc_timeval now; 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;
}