0

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

我会将计时器包含在确实加载功能中。因此,计时器会永久检查 event1 是否发生。

[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的区间可以吗?

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

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

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

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

谢谢菲利普

4

1 回答 1

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

不,它不会在后台减慢设备速度。当应用程序处于后台时,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?

不,除非您的游戏更新不多,例如没有动画的回合制游戏。不保证定时器事件的交付时间。它可能会大幅下滑。您可能希望在每次迭代(通常是一帧)上顺利更新游戏状态。你的游戏中有帧更新循环吗?如果需要,那将是检查碰撞和计算时间的地方。

你说的是注意到一个事件。更好的设计是使用“推”而不是“拉”。当事件发生时,它会通知所有感兴趣的各方,反之亦然。

于 2013-09-25T03:30:39.773 回答