我正在寻找与 cocos2d update:(ccTime)delta 函数等效的函数,以便在没有 cocos2d 的情况下使用。我需要每秒执行尽可能多次的检查。是否有像这样或drawRect这样的 native 函数可以尽可能频繁地调用,以便我可以使用?
伪代码:
timeElapsed += delta;
if (timeElapsed > beatTime)
{
timeElapsed = 0;
beat++;
for (SoundBlock* block in blocks)
{
[block play];
}
}
本质上,我想每秒尽可能多次地执行这样的检查。
最佳答案
您可能不想尽快检查某些内容,因为这会导致性能问题。
如果您想要随显示器更新的内容,您可以使用 CADisplayLink 。您可以通过谷歌搜索示例,例如 one .
如果不需要链接显示刷新,可以设置NSTimer ,或使用 performSelector:withObject:afterDelay 的变体.
如果您需要高分辨率计时器,请查看 this technical note .
NSTimer 和 PerformSelector 的分辨率都在 50-100 ms 左右,这对于声音播放来说是不够的。
我建议您使用带有 mach_wait_until() 的单独实时线程,如技术说明中所述。使用技术说明中的 list 2 中的代码,使用 play_beat()
每 BEATS_PER_SEC
播放一次声音,将如下所示:
void play_beat_thread(int argc, const char * argv[])
{
mach_timebase_info(&timebase_info);
uint64_t time_to_wait = nanos_to_abs(10ULL * BEATS_PER_SEC);
uint64_t next = mach_absolute_time();
while (true)
{
next = next + time_to_wait;
mach_wait_until(next);
play_beat();
}
}
如果您需要有关高分辨率音频计时的更多建议,我建议您按照“如何在 iOS/OS X 上手动安排高分辨率音频播放”来重新组织此问题。
>关于iphone - Cocos2d更新功能等效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17644664/