我遇到了iOS9的巨大性能問題,我無法弄清楚該怎麼做。我讀過很多文章 - 例如here和here,但他們建議的解決方案並沒有幫助,也沒有什麼區別。Sprite Kit的主要iOS9性能問題
我的遊戲已經從舊iPad 2(iOS 8.4)上的60fps變爲新iPad mini(iOS 9)上的每秒15fps <。
我試圖找出主要的罪魁禍首。我很確定其中之一是SKCropNodes。我通常在我的場景中渲染幾個SKCropNodes(6 - 18)。這在iOS8中從來都不是問題,但它看起來像iOS9,雖然它的剪裁效果更好,但它的表現也令人滿意。
如果我將裁剪節點渲染爲正常的SKSpriteNodes,那麼舊設備上的增益可能爲5fps,在較新的iPhone 6上可能增加到30fps。我沒有其他選擇使用裁剪節點,但它不能成爲整個問題。
我想也許是錯誤的紋理地圖集正在使用 - 即一個更大的分辨率。但是強迫我的設備使用非常小的圖集沒有任何區別。
我使用Texture Packer爲不同設備的縮放變體生成我的地圖集。我注意到XCAssets現在提供了一個添加Sprite Atlas的選項(我似乎無法找到關於此的任何文檔)。這不適合我的遊戲,因爲我使用了100多個精靈。我已經嘗試將我的地圖集添加到XCAssets,但由於某種原因,它不會使用縮放變體。儘管如此,低分辨率紋理仍然非常糟糕。
我已經嘗試設置
skView.ignoresSiblingOrder = YES;
並給予我的所有節點z位置值,但仍然沒有效果。我還爲每個圖像名稱添加了.png擴展名(最初是一個意味着它們不會呈現的問題)。
我在場景中有一些SKEffectNodes,但刪除並添加這些似乎沒有效果。
我不明白相同的硬件和相同的代碼如何產生這種截然不同的結果。很明顯,蘋果已經改變了一些與渲染有關的事情,這些事情已經產生了不利影響。他們似乎也無意解決這些問題。我意識到在iOS9發佈之前的幾個月裏,這個問題一直存在。
我已經在這個遊戲上工作了2年,現在只在iOS9之前發佈。現在它正在遭受糟糕的表現,並且經常崩潰。
有沒有人知道Apple究竟幹了什麼?如果我知道這一點,我至少可以嘗試解決它......謝謝。
UPDATE
下面是同一場景的一些數字,隨着遊戲會產生在同一時間節點的絕對最大數量。
iOS 8的,iPad 2的〜200個節點,〜100平58.7 - 60幀
的iOS 9,iPhone6,〜280個節點,〜216繪製,約20 fps的
我假定的差節點數量是由於不同的屏幕尺寸。如果我改變對iPhone 6現場實現等效值時,FPS仍然是圍繞24
更新2
使用Xcode的模板雪碧套件項目,改變飛船的SKCropNode含飛船,在iOS 8上,我可以添加100個沒有幀速率問題的船隻。在iOS 9,同一個項目,我可以iPad2的添加約25之前的幀速率下降到< 30.
的iOS 8:
的iOS 9 iPhone 5:
在紋理地圖集的使用方面,如我的評論,我不能保證任何東西都將從相同的地圖集繪製。我的遊戲包含自定義字符,來自一系列地圖集(每個地圖包含〜100個紋理)。屏幕上一次最多可以顯示9個字符。我明白這不是最有效的吸引方面,但我從來沒有遇到過的問題,直到iOS9 ...
更新3
我已經提交一個bug蘋果公司,包括我示例程序。我也用完了我的一項技術支持請求。迄今爲止,蘋果沒有任何東西。
請更新與相關性能信息,比如你的問題:繪製調用和FPS數對8和9,儀器時間和8與9等fps配置文件等。 – quellish
好吧,我已經添加了一些更多的信息。即使在同一場景中的iPhone 6和iPad 2上,性能也會大幅下降。 – Smikey
@Smikey關於抽籤計數(與抽籤問題無關)即使100次抽籤對於200個節點來說也太多了。 。首先確保你正確使用地圖集。請閱讀此部分了解有關可以中斷批處理過程的更多信息:http://stackoverflow.com/a/22856964/3402095。其次,你必須記住SKLabelNode,SKShapeNode和SKCropNode需要(至少)每個節點一次繪製調用。那些不能像SKSpriteNode那樣批量繪製。 – Whirlwind