gpt4 book ai didi

ios - Cocos2D 2.0 提高调度精度

转载 作者:行者123 更新时间:2023-11-29 13:31:09 26 4
gpt4 key购买 nike

我的一个场景中有这样一行:

[self schedule:@selector(storeValue:) interval:1.0/30.0];

storeValue 非常基础且快速。它只是将层的位置存储在 NSMutableArray 上。我需要在尽可能精确的时间调用此 storeValue,但在进行一些测量后,这些是每次 storeValue 调用之间测量的间隔:

interval 0 = 0
interval 1 = 0.049962
interval 2 = 0.033345
interval 3 = 0.033332
interval 4 = 0.049994
interval 5 = 0.050050
interval 6 = 0.049968
interval 7 = 0.033998
interval 8 = 0.049331
interval 9 = 0.050015
interval 10 = 0.049979
interval 11 = 0.049999
interval 12 = 0.033357
interval 13 = 0.033307
interval 14 = 0.049997
interval 15 = 0.033322
interval 16 = 0.050317
interval 17 = 0.049743
interval 18 = 0.049973
interval 19 = 0.033322
interval 20 = 0.050024
interval 21 = 0.049975
interval 22 = 0.049987
interval 23 = 0.033316
interval 24 = 0.050038
interval 25 = 0.050149
interval 26 = 0.049852
interval 27 = 0.049989
interval 28 = 0.050011

因此,如您所见,该方法以各种间隔调用,而不是始终为 0.03333 (1/30)。

我试图从 storeValue 中删除所有代码,以查看调用 storeValue 的频率并获得相同的不规则计时。

最大的问题是:我应该怎么做才能提高日程安排的准确性?我应该使用 NSTimer 吗? GCD 还有其他做计划任务的方法吗?有什么建议吗?

谢谢。

注意:我现在发现,如果我设置 interval = 0,storeValue 将在每一帧被调用,这意味着 1/60s 并且精度非常好。好的,我可以制定一个逻辑,在一半时间调用 storeValue,但很高兴知道为什么 schedule 如此不精确以及是否有改进它的方法。

最佳答案

当你安排一些事情时,选择器和定时器频率被传递给 Cocos2d sharedScheduler。然后 sharedDirector 在每一帧上调用 [[Scheduler sharedScheduler] tick: dt];。如果您的计时器超过其阈值,调度程序将调用您的选择器。

所以频率不能比mainloop频率更精确(最大1/60,最小——取决于实际场景复杂度)。可能 1/30 通过阈值并不完全在每个第二帧上,这就是为什么你在日志中没有精确的值。

我可以建议在不使用 Cocos2d 调度程序的情况下通过 NSTimer 在其他线程上调用您的选择器。

关于ios - Cocos2D 2.0 提高调度精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11868265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com