2009-02-23 39 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