Cocos2d更新功能相当吗?

时间:2013-07-14 23:03:45

标签: iphone ios objective-c ipad function

我正在寻找一个等效的cocos2d更新:(ccTime)delta函数,无需cocos2d即可使用。我需要尽可能多次执行检查。是否有像我这样的本机函数或drawRect尽可能频繁地调用?

伪代码:

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

基本上,我想每秒多次执行这样的检查。

1 个答案:

答案 0 :(得分:1)

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

如果您想要使用显示更新某些内容,可以使用CADisplayLink。你可以谷歌周围的例子,例如one

如果您不需要将其关联到显示刷新,则可以设置NSTimer,或使用performSelector:withObject:afterDelay的变体。

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

NSTimer和performSelector的分辨率都在50-100毫秒左右,这对于声音播放来说还不够。

我建议你使用一个单独的实时线程和mach_wait_until(),如技术说明中所述。使用技术说明中清单2 中的代码,使用BEATS_PER_SECplay_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上手动安排高分辨率音频播放的方式重新构建此问题。