我想运行一个计时器来监视游戏过程中发生的一些事件。
我会在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设备的性能如何呢?这是一个问题吗?
谢谢你 菲利普答案 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?
不,除非您的游戏更新不多,例如一个没有动画的转弯游戏。计时器事件的交付时间无法保证。它可能会显着下滑。您可能希望在每次迭代时平滑地更新游戏状态,这通常是一个帧。你的游戏中有帧更新循环吗?如果需要的话,那将是检查碰撞和计算时间的地方。
您正在谈论注意事件。更好的设计是使用“推”而不是“拉”。当事件发生时,它通知所有感兴趣的各方,反之亦然。