2011-07-30 70 views
0

我正在研究只涉及一個對象的二維,基於翻譯的動畫的iPhone遊戲。這個對象從UIView繼承,並用Quartz-2D繪製。該翻譯目前由一個NSTimer生效,該NSTimer在每一幀中打勾並告訴UIView改變它的位置。使用Quartz的iOS逐幀動畫製作

但是,有一些相當複雜的數學後面確定在下一幀期間UIView應該移動的位置。在iOS模擬器上測試遊戲效果很好,但是在iPhone上測試時,它絕對會跳過幀。

我的問題是這樣的:我的方法是逐幀翻譯視圖一個簡單的壞方法?我知道OpenGL更常用於遊戲,但爲這樣一個簡單的動畫設置OpenGL似乎是一種恥辱。儘管如此,這是值得的麻煩?

回答

0

iPhone模擬器的問題是它可以訪問與您的mac相同的資源。你的Mac RAM,視頻卡等。我建議做的是打開iPhone SDK附帶的instruments.app,並使用CoreAnimation模板來查看你的資源如何被管理。你也可以看一下分配情況,看看它是否會佔用內存。 CPU也可以提供幫助。

tl; dr iPhone sim使用您的mac ram和GFX卡。試着看看樂器中的序列,看看它們是否有些滯後。

1

很難說不知道用什麼樣的複雜數學來計算翻譯。如果GPU真的是瓶頸,那麼僅僅使用OpenGL纔有意義。我懷疑事實並非如此,但您必須測試哪些部件導致跳幀。

一般而言,UIViewCALayer在OpenGL之上實現,所以動畫翻譯UIView已經使用GPU。

另外,使用CADisplayLink而不是NSTimer可能會更適合遊戲循環。

+0

CADisplayLink是一個好主意,謝謝。至於瓶頸,我不知何故忽略記得其實有另一個動畫,基本上是一系列更新每一幀的動畫。我意識到,這是目前用Quartz繪製的,可能是瓶頸,應該在OpenGL中完成。 – pinerd314159