0

我创建了一个动画游戏应用程序,其中我使用 NSTimer 在特定时间间隔后移动图像。

timer = [NSTimer scheduledTimerWithTImerInterval:0.2 target:self selector:@selector(MoveVirus) userinfo:nil repeats:YES];

此计时器调用函数 MoveVirus,MoverVirus 移动病毒(屏幕上的图像)。

它在开始时工作正常,但运动速度会自动增加。运动速度的增加破坏了所有进一步的逻辑。

我不知道它有什么问题?

请帮助解决这个问题。

4

1 回答 1

2

NSTimer 不一定适用于这种用途......来自 NSTimer 上的文档:

定时器不是实时机制;它仅在已添加计时器的运行循环模式之一正在运行并且能够检查计时器的触发时间是否已过时触发。由于典型的运行循环管理的各种输入源,计时器的时间间隔的有效分辨率被限制在 50-100 毫秒的数量级。如果在运行循环处于未监视计时器的模式或长时间调用期间发生计时器的触发时间,则计时器不会触发,直到运行循环下一次检查计时器。因此,定时器触发的实际时间可能是计划触发时间之后的一个重要时间段。

如果要移动包含在 UIImageView 中的 UIImage,更好的方法是使用 UIView 上的类动画方法。如果使用包含延迟的动画方法,在特定时间后移动图像仍然可以获得相同的结果。方法是:

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

使用这个方法,你可以指定动画的时间(动画你的 UIImages 的移动需要多长时间),在开始这个动画之前等待多长时间,一组动画选项,一个动画代码块和一个块动画完成时执行。

于 2012-04-06T16:43:32.387 回答