我创建了一个动画游戏应用程序,其中我使用NSTimer在特定时间间隔后移动图像。
timer = [NSTimer scheduledTimerWithTImerInterval:0.2 target:self selector:@selector(MoveVirus) userinfo:nil repeats:YES];
此计时器调用MoveVirus函数,MoverVirus移动病毒(屏幕上的图像)。
它在开始时工作正常但运动速度自动增加。 增加的运动速度破坏了每一个进一步的逻辑。
我不知道它有什么问题?
请帮助解决这个问题。
答案 0 :(得分: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所需的时间),开始播放动画前等待的时间,动画选项的设定,动画代码块,以及动画完成时执行的块。