2016-01-18 91 views
1

我需要有一個像iPad視網膜屏幕一樣大的動畫,2048x1536,但是這個尺寸超過了最大尺寸,有沒有其他的方法可以製作一個很大的動畫? 我已經嘗試使用一些精靈和SKActions來實現相同的結果,但我想切換到SKTextureAtlas出於性能原因SkTextureAtlas動畫iPad視網膜?

+0

在這個火災演示中可以看到一個工作示例:http://stackoverflow.com/a/38679128/763355 – MoDJ

回答

2

讓我們忘記一個事實,即您不能使用那麼大的圖像,並假設您使用一個較小的圖像(例如,2000x1500這將工作)。這有什麼缺點?

內存消耗

在同一圖像加載到內存大小爲2000x1500的圖像可以在存儲在磁盤上,但沒有任何實際的內存消耗可能只需20千字節或更小。爲了計算標準RGBA8888圖像所需的內存,則可以使用此:

width x height x bytes per pixel = size in memory 

RGBA8888格式使用4個字節的每個像素(每個紅,綠,藍和alpha通道1個字節)如果做數學,你會看到每個2048x1536圖像都需要大約12兆字節的內存。很明顯,因爲memory is not unlimited resource,你可以很容易地遇到內存問題。

批渲染和繪製調用

另外,更重要的是有把這個大圖片到寰椎沒有真正的好處,並在必要時SpriteKit會分裂地圖集。例如,在10個2000x1500圖像的情況下,SpriteKit會將一個地圖集紋理分成十個地圖集紋理。渲染時需要10次繪製調用,並且使用地圖集的全部目的都被打敗。

解決方案

如果你真的需要那麼大的動畫,使用視頻,而不是圖像。這是由蘋果在SKVideoNode節的建議:

像任何其他節點,你可以把電影節點的任何地方 節點樹和雪碧套件內將正確渲染。例如,您可能會使用視頻節點爲一些視覺行爲製作動畫,這些視覺行爲會使用紋理集合進行定義,這些視覺行爲會很昂貴。

或者你可以嘗試以不同的方式製作動畫,例如。從動畫中移除靜態部分,並創建真正需要動畫的動畫。你也可以嘗試將動畫分成幾部分。

+0

嘿,感謝您的回答,我遇到了我的遊戲的性能問題(可能是由於我的代碼錯誤,我不知道),所以我試圖減少精靈的數量,SKTextureAtlas將是37張圖片,你認爲使用4個更精靈比動畫更好更好? –

+0

@carlb一般來說,SpriteKit能夠以60fps渲染數百個精靈,如果繪製調用保持在低位。但這是另一個話題,所以你應該問一個新的問題,例如(當前繪製調用,節點數,iOS,你正在測試的設備等)。這樣,有人可能會看到問題出在哪裏,並會給你最佳的解決方案,但正如我所說的,你必須提供比這更多的數據。 – Whirlwind

+0

您將會更好地製作節點並對動畫進行編碼,在所有iPad 3和4硬件中,H264文件的渲染效果不會像整個iPad屏幕那麼大。你可以使用巨大的PNG,但應用程序的大小將是一個真正的問題。最好使用較小的視頻並將其縮放或使用節點構建動畫。 – MoDJ

相關問題