NSTimer设备的性能

时间:2013-09-25 03:24:50

标签: objective-c events nstimer game-engine

我想运行一个计时器来监视游戏过程中发生的一些事件。

我会在do load函数中包含计时器。因此,如果发生了事件1,Timer会永久性地检查。

[NSTimer scheduledTimerWithTimeInterval:0.001
    target:self
    selector:@selector(check_status_event1:)
    userInfo:nil
    repeats:YES];

我还尝试设置指向Timer的指针,以便在需要时使其无效。

- (IBAction)check_status_event1:(id)sender
{
    //_stepper_event1_status_check.value (0 = no / 1 = yes)
    if (_stepper_event1_status_check.value == 1) {
        _stepper_event1_status_check.value = 0;  //reset stepper again
        [self event1_go:0];
    }else{}
}

问题:

间隔为0.001 o.k?

对设备性能有很大影响吗?因为永久运行if语句(或更多)。当游戏通过主页按钮发送到后台时,它是否也会使iPhone或iPad变慢?

我可以同时使用更多此计时器吗?例如,当我运行10或20个时。

这是捕捉游戏中发生的事件的正常方法吗?例如,2个对象的整理。我还在1秒后用计时器设置了一些代码(步骤1)。 2秒后(步骤2)。 3秒后(步骤3)....当我使用这样的计时器时,我可以准确地开始下一步,此时前一步已完成。也许一步需要超过1秒。而且我不想使用animateWithDuration和Delay。也许iPad 2在处理和阅读整个代码时作为iPad 4的速度较慢。当步骤1尚未完成时,我不想从第2步开始。

但iOS设备的性能如何呢?这是一个问题吗?

谢谢你 菲利普

1 个答案:

答案 0 :(得分:0)

Is the interval of 0.001 o.k?

可能不是。 “定时器的时间间隔的有效分辨率限制在50-100毫秒的量级”。您可以将其设置为0.001,但不太可能按时完成计时器。

Does it maybe also make the iPhone or iPad slower, when the game is sent to background

不,它不会在后台减慢设备速度。当app处于后台时,iOS会停止计时器。

Can I use more of this timer at the same time? for example when I run 10 or 20 of them.

是的,你可以,但你可以找到更好的解决方案。

I don't want to use animateWithDuration and Delay.

这会让你的生活更轻松。即使设备处于负载状态,iOS也会进行扩展以使您的动画更加流畅。

Is this the normal way to catch an event that occur during the game?

不,除非您的游戏更新不多,例如一个没有动画的转弯游戏。计时器事件的交付时间无法保证。它可能会显着下滑。您可能希望在每次迭代时平滑地更新游戏状态,这通常是一个帧。你的游戏中有帧更新循环吗?如果需要的话,那将是检查碰撞和计算时间的地方。

您正在谈论注意事件。更好的设计是使用“推”而不是“拉”。当事件发生时,它通知所有感兴趣的各方,反之亦然。