我想用Cocos2d-x开发一款跨平台的应用程序,一个随时可以倒计时的钟表。如果让我直接写的话,我会用C++的time(...),mktime(...)和difftime(...)。但考虑跨平台的需求,这种方法显然不合适。那在Cocos2d-x里没有较好的解决方案(如直接内置到框架中的方法)。而且,我需要应用可以在iPhone、iPad和Android三个终端都能正常工作。
原问题:Is there a preferred way to get the system time in cocos2d-x?
答案
einverne:这个函数可以获取系统当前的时间,以毫秒为单位。我是一个Cocos2d-x新手,希望对你有所帮助。
static inline long millisecondNow() { struct cc_timeval now; CCTime::gettimeofdayCocos2d(&now, NULL); return (now.tv_sec * 1000 + now.tv_usec / 1000); }
NonlinearIdeas(提问者):这个似乎接近我的需求,但这只是我需要的一部分,一般情况下,我需要一个真正的“日期和时间”对象(或结构),不只是以毫秒为单位。我自己尝试了下,就目前而言,最佳的解决方案似乎是用C++中的经典“三剑客” localtime,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; }