在Cocos2dx中显示毫秒时有些挣扎。我想避免为不同的机器使用不同的代码库。
这适用于32位iPhone / iPod平台,但在64位上,它始终返回零秒,并且没有时间经过:
timeval time;
gettimeofday(&time, NULL);
unsigned long millisecs = (time.tv_sec * 1000) + (time.tv_usec / 1000);
return (float)millisecs;
此功能在64位iPhone / iPod平台和32位平台上具有相同的功能,但基于时钟周期,因此,如果用户收到短信或在后台打开程序,则时间会膨胀:
clock_t t;
t = clock();
return 10000.0 * ((float)t)/CLOCKS_PER_SEC;
这可以准确地计算时间,但仅以秒(而不是毫秒)为单位:
auto timeInMillis = std::time(nullptr);
我发现这样做的唯一方法是设置一个定期更新事件并将dt添加到一个float中(这似乎总是准确的),这是可以的,但并不理想。
基本上在更新中
timeElapsed += dt;
没关系,但是仅当正在进行持续的计时更新运行时,它才有效。
在32位和64位设备以及它们如何报告时间方面似乎存在差异。在32位设备上正常工作的代码段:
timeval time;
gettimeofday(&time, NULL);
unsigned long millisecs = (time.tv_sec * 1000) + (time.tv_usec / 1000);
将在所有64位设备上将“ millisecs”设置为0。我发现的唯一可行的解决方案是使用一个名为“ _millisecs”的浮点值,并在我的update()函数的第一行中,将dt添加到_millisecs。这不会在函数内部提供准确的报告,但是它将随时精确报告自首次计划update()以来已经经过了多少时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句