我正在製作一個遊戲,需要在屏幕上繪製多個圖像。我使用這個代碼是:iPhone編程Quartz Slow
- (void)drawRect:(CGRect)rect {
for (i=1;i<=totalImages;i++) {
if (imageExists[i]) {
[image drawAtPoint:CGPointmake(imageX[i],imageY[i])];
}
}
}
這drawRect中通過函數調用:
-(void) gameLoop {
[self setNeedsDisplay];
}
而且gameloop由定時器稱爲每秒60個定時器
[NSTimer scheduledTimerWithTimerInterval:0.01666 target:self selector:@selector(gameLoop) userInfo:nil repeats:YES];
imageExists [],IMAGEX []和圖像j []數組是我在gamecode用於創建/刪除,並在屏幕上移動圖像。
我的問題是,當我有大約40圖像周圍的framespeed移動幾乎是由時只有1圖像減半。我的遊戲最多需要88張圖片。 (這只是當我測試它在我的iPod Touch的發生,在模擬器,一切工作正常...)
我的問題是:爲什麼是的drawRect函數慢,或者是它的drawAtPoint?我該如何解決這個問題?我是否應該使用它來繪製圖像,還是應該學習OpenGL ES來製作遊戲?
我不會建議這是答案,因爲我不知道這些效果,但是如果您使用CALayers作爲精靈,會發生什麼情況。在設置傳遞CGImage的邊界以初始化它們之後,只需在CALayers上調用-setContents即可。然後通過在圖層上調用-setPosition(或通過使用顯式動畫)來對動畫進行動畫處理。我建議這樣做的原因是因爲核心動畫運行在OpenGL之上,而不必明確使用OpenGL。我只是想知道它是否會給你更好的表現。 – 2010-08-26 15:09:17
@Matt - 你應該讓這個答案,因爲這是一個完美的有效解決方案,他的表現問題。 – 2010-08-26 16:07:19