2009-02-23 19 views
0

我们正在研究几个简单的游戏,并且我们遇到了一些性能问题,并且我们很好奇它是代码问题还是“我们正在使用错误对象“问题。使用简单图形的iPhone上的性能问题

我们的游戏基本上都是简单的那些工作方式如下:

我们有我们加载自定义视图,那就是我们的游戏引擎的自定义对象。视图有一个触发像这样的计时器:

[NSTimer scheduledTimerWithTimeInterval:1.0/30.0 target:self selector:@selector(animationTimerMethod) userinfo:nil repeats:YES]; 

,并在我们的计时方法,我们有以下几点:

- (void)animationTimerMethod:(NSTimer*)timer 
{ 
    if([gameEngine doGameLoop]) //only redraw if we need to 
    [self setNeedsDisplay]; 
} 

我们的绘图代码是非常简单的,我们只是画了几个使用类似于以下代码的图像:

- (void)drawRect:(CGRect)rect 
{ 
    CGGraphicsContext ctx = UIGraphicsGetCurrentContext(); 
    CGContextDrawImage(ctx, someRect, someImage); 
} 

我们遇到的主要问题是对触摸的响应。我们的代码不会在touchesBegan方法中多次得到响应。这仅仅是Core Graphics库的限制吗?我们应该使用OpenGL吗?还有其他的方式来做简单的动画(甚至不是在屏幕上移动的对象,只是在同一个地方的对象的动画6帧左右),会更具响应性?

非常感谢!

回答

0

我的第一个问题是你的图片是否具有透明度?

具有高度效果表现的透明度的图像。 在苹果的文档中,他们多次提到了这一点。

我会问的第二件事是,你有没有尝试在乐器和/或鲨鱼中运行你的应用程序?这两个应用程序都可以帮助您了解问题发生的位置。

1

有一定的方法可以加快速度。每帧手动重绘图像意味着您正在重新绘制可以重复使用的纹理。您可以通过移动到OpenGL或将图像移动到CALayer中重新使用它们,然后重新定位图层而不是重新绘制图像。

如果您不想移动到OpenGL,您可能还会看到通过转向CAAnimation取得显着的性能优势,而不是让您的代码计算每帧,但这可能需要对引擎进行重大更改。

此外,如果你可以避免避免alpha合成它是一个很大的加速。

+0

在这种情况下,我并没有移动图像...我不时地改变它们(做简单的原地动画)......移动到Layers或CAAnimation仍然会有所作为吗? – Jonas 2009-02-24 16:11:20