Iphone Cocos2d更新函数等效?

Iphone Cocos2d更新函数等效?,iphone,ios,objective-c,ipad,function,Iphone,Ios,Objective C,Ipad,Function,我正在寻找一个等价于cocos2d更新:(ccTime)delta函数的函数,以便在没有cocos2d的情况下使用。我需要一秒钟进行尽可能多的检查。有没有像这样的本机函数或drawRect被尽可能频繁地调用以供我使用 伪代码: timeElapsed += delta; if (timeElapsed > beatTime) { timeElapsed = 0; beat++; for (SoundBlock* block in blocks) {

我正在寻找一个等价于cocos2d更新:(ccTime)delta函数的函数,以便在没有cocos2d的情况下使用。我需要一秒钟进行尽可能多的检查。有没有像这样的本机函数或drawRect被尽可能频繁地调用以供我使用

伪代码:

timeElapsed += delta;
if (timeElapsed > beatTime)
{
    timeElapsed = 0;
    beat++;
    for (SoundBlock* block in blocks)
    {
        [block play];
    }
}

基本上,我希望每秒执行这样的检查次数尽可能多。

您可能不希望以尽可能快的速度检查某些内容,因为这会导致性能问题

如果您想要一些随显示更新的内容,可以使用。你可以在谷歌上搜索例子,就像这样

如果不需要将其链接到显示刷新,则可以设置或使用的变体

如果您需要高分辨率计时器,请查看

NSTimer和PerformSelect的分辨率都在50-100毫秒左右,这不足以播放声音

我建议您使用一个单独的带有mach_wait_until()的实时线程,如技术说明中所述。使用technote中清单2中的代码,使用
play\u beat()
每隔
秒播放一次声音的内容如下所示:

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上手动安排高分辨率音频播放”的思路重新构造这个问题。

Hmm。我正在使用的应用程序是一个节拍序列器,因此我尝试根据经过的时间检查节拍播放。我可能基本上能够让检查每x个时间递归地调用它自己,所以我实际上只在每次需要检查时进行检查。那将是非常有效的@LoganShire如果60次检查/秒足够,则CADisplayLink可能足够。NSTimer通常不提供高分辨率计时。你也应该考虑你用什么线程来做这件事。如果不锁定整个UI,就无法在主线程上执行忙循环。我添加了一个关于高分辨率定时器的技术说明链接。如果你需要经常检查,它有一些例子可以帮助你开始。不过要小心线程问题。我将尝试递归执行选择器解决方案,看看它是否有效,因为它是迄今为止最有效的解决方案,因为它只会在每次需要更新时调用。如果这不起作用,我将尝试显示链接。@logan“执行选择器”的问题是在精度方面与NSTimer类似。你能给出一个(伪代码)示例说明你想做什么吗?只是添加了伪代码。