iPhone编程太慢了
我正在制作一个需要在屏幕上绘制多个图像的游戏。我使用的代码是:iPhone编程太慢了,iphone,performance,drawing,quartz-graphics,Iphone,Performance,Drawing,Quartz Graphics,我正在制作一个需要在屏幕上绘制多个图像的游戏。我使用的代码是: - (void)drawRect:(CGRect)rect { for (i=1;i<=totalImages;i++) { if (imageExists[i]) { [image drawAtPoint:CGPointmake(imageX[i],imageY[i])]; } } } 游戏循环被计时器称为每秒60个计时器: [NSTimer schedule
- (void)drawRect:(CGRect)rect {
for (i=1;i<=totalImages;i++) {
if (imageExists[i]) {
[image drawAtPoint:CGPointmake(imageX[i],imageY[i])];
}
}
}
游戏循环被计时器称为每秒60个计时器:
[NSTimer scheduledTimerWithTimerInterval:0.01666 target:self selector:@selector(gameLoop) userInfo:nil repeats:YES];
imageExists[]、imageX[]和imageY[]是我在游戏代码中用于在屏幕上创建/删除和移动图像的数组
我的问题是,当我有大约40幅图像在帧间移动时,速度几乎比只有一幅图像时降低了一半。我的游戏最多需要88张图像(只有在我的iPodtouch上测试时才会出现这种情况,在模拟器中一切正常…)
我的问题是:为什么drawrect函数那么慢,还是drawAtPoint?我怎样才能解决这个问题?我真的应该用它来绘制图像,还是应该学习OpenGL ES来制作游戏?我的建议是研究一个游戏库,它可以在幕后为您处理大部分OpenGL内容。与Quartz和CoreAnimation相比,它将在典型游戏功能中获得更高的性能,并包括用于集成游戏交互的物理和声音库
为2D游戏编写OpenGL的首要任务是更好地管理进入视频内存的内容,而不是留在RAM中的内容,这在将精灵快速移动到屏幕上的正确位置时非常重要。我的建议是查看一个像这样的游戏库,它在幕后为您处理大部分OpenGL内容。与Quartz和CoreAnimation相比,它将在典型游戏功能中获得更高的性能,并包括用于集成游戏交互的物理和声音库 对于2D游戏来说,写入OpenGL的首要任务是更好地管理进入视频内存的内容,而不是内存中的内容,这在将精灵快速移动到屏幕上的正确位置时非常重要。有几件事:
- 不要使用计时器。使用CADisplayLink。它就像一个计时器,只是它在vsync上启动。看看苹果的医生
- 是的,你肯定想走OpenGL的路。这里的问题是,在每一帧重绘时,您将40多个纹理从CPU推送到GPU。在OpenGL中,您可以一次推送所有纹理,然后告诉GPU“移动”它们。这样会更有效率。(即稳定的60fps,CPU使用率非常低)
- 不要使用计时器。使用CADisplayLink。它就像一个计时器,只是它在vsync上启动。看看苹果的医生
- 是的,你肯定想走OpenGL的路。这里的问题是,在每一帧重绘时,您将40多个纹理从CPU推送到GPU。在OpenGL中,您可以一次推送所有纹理,然后告诉GPU“移动”它们。这样会更有效率。(即稳定的60fps,CPU使用率非常低)
- 有几件事:
[NSTimer scheduledTimerWithTimerInterval:0.01666 target:self selector:@selector(gameLoop) userInfo:nil repeats:YES];