Есть ли предпочтительный способ получить системное время в cocos2d-x?

Пишу кроссплатформенное приложение на Cocos2d-x. Мне нужно получить время, чтобы создать часы обратного отсчета до определенного времени суток. Поскольку это на C++, я могу использовать time(...), mktime(...) и difftime(...), если мне нужно, как прямой подход.

Есть ли предпочтительный метод в Cocos2d-x для кросс-платформенного способа (то есть что-то, встроенное непосредственно в фреймворк)? Я хочу, чтобы приложение работало одинаково на iPhone, iPad и Android.


person FuzzyBunnySlippers    schedule 10.12.2013    source источник


Ответы (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);
person KARTHIK RA    schedule 07.01.2014

Попробуйте этот код

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

Я использовал эту функцию, чтобы получить текущее время в миллисекундах. Я новичок в cocos2d-x, поэтому надеюсь, что это может быть полезно.

person einverne    schedule 10.12.2013
comment
Это кажется близким к тому, что я ищу. Я попробую и дам отзыв. Спасибо. - person FuzzyBunnySlippers; 10.12.2013

Вы должны попробовать эту библиотеку, я только что проверил, и она отлично работает.

https://github.com/Ghost233/CCDate

Если вы получаете неправильные значения, установите timezoneOffset = 0;

Примечание: 0 ‹= месяц ‹= 11

person VAdaihiep    schedule 28.12.2013

Вы можете запланировать обновление в классе часов.

Вызов обновления с аргументом float, который представляет собой дельту времени в секундах после последних вызовов, этот метод вызывается каждый кадр, и cocos2d-x получает время от системы и подсчитывает дельту.

person Wez Sie Tato    schedule 10.12.2013
comment
Спасибо. Хотя это верно, вопрос не в том, чтобы запланировать проверку на время, а в том, как сделать сам запрос времени. Например, в Objective-C есть класс NSDate только для обработки даты/времени. В C# есть класс DateTime для обработки времени. Есть ли что-то эквивалентное в cocos2d-x? - person FuzzyBunnySlippers; 10.12.2013

Я думал, что этот код поможет:

статическая встроенная длинная миллисекундаNow() { struct cc_timeval now; CCTime::gettimeofdayCocos2d(&now, NULL); возврат (now.tv_sec * 1000 + now.tv_usec / 1000); }

ОДНАКО дает только часть того, что мне нужно. В общем, мне нужен реальный объект (или структура) «дата и время», а не просто время суток в миллисекундах.

На данный момент лучшим решением, по-видимому, является использование "классического" локального времени, mktime, difftime trifecta в С++. У меня есть несколько примеров ниже некоторых основных операций... Я могу подготовить общий класс для выполнения таких операций, но пока это хорошее начало и показывает, как двигаться дальше:

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;
}
person FuzzyBunnySlippers    schedule 19.12.2013