设备上的NSTimer比模拟器慢

时间:2009-05-27 12:20:25

标签: iphone objective-c core-graphics

我是iPhone开发的新手。我使用[NSTimer scheduledTimerWithTimeInterval:0.01]进行游戏循环。游戏包含绘图功能,我使用CGContextClipToRect剪辑动画的大图像。

但速度0.01秒仅在模拟器中工作,而不在设备上。我怎样才能克服这个问题?

定时器代码在视图控制器中为

(void)viewDidLoad {
    GameView *main = [[GameView alloc] 
    initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    main.backgroundColor = [UIColor blackColor]; 
    self.view = main; 
    [main release];    
    self.tim = [NSTimer scheduledTimerWithTimeInterval: 0.01         
    target: self selector: @selector (gameloop:) userInfo: nil repeats: YES]; 
    [super viewDidLoad];
}

任何人都可以帮助我?

3 个答案:

答案 0 :(得分:1)

NSTimer是这项工作的错误工具。它并不意味着是一个实时计时器。它无法保证何时会发射,你可以轻易地错过帧。

关于如何在this thread上开发此类程序,有很多很好的建议。请特别注意Apple的示例代码。

答案 1 :(得分:0)

正如U62所说,100fps不是一个现实的期望,尝试运行它30,可能每秒60次更新,看看它是如何运行的。此外,如果您编写的游戏需要以高帧率运行,您应该考虑在OpenGL中编写它。

一个选项可能是每个刻度处理逻辑,但每隔几个刻度只绘制到屏幕。

答案 2 :(得分:0)

我的意思是,例如当我为帧动画时,帧在模拟器中以正确的速度显示。 但是在设备中它显示非常慢(FPS),换句话说,一个男孩在模拟器中快速运行。但是 他走路的设备。