2015-02-11 49 views
0

我目前正在開發一個精靈套件的遊戲,兩個主畫面& B. A的位置之間滾動(0,0)和B位置爲(0,device_height)。平局計增加異常

大多數時候,在遊戲運行和60fps的平局計爲8或10 (與SKView::showsDrawCount財產得到了)但有時候,僅有B屏幕上,數量異常增加吸引至70-80平!

這裏的一些事實:

  • 我不刪除的畫面節點時,我展示的B,因爲一個節點繼續影響物理學。
  • 我正在使用SKTextureAtlas,並且我爲了優化目的在字典中預加載了所有紋理
  • 即使刪除了裝飾節點(粒子,背景),繪圖計數也會增加。
  • 當錯誤發生時,非宰殺節點數量增加顯著(由SKView::showsNodeCount給出),但我真正的節點數(通過使用[node::children count]遞歸發現)是穩定的。

是否有人遇到了問題,以及可以進行哪些優化?

我怎麼能有關於這些詳細信息即將看到他們在哪裏來的呢?

感謝

編輯:

剛剛發現了一些很有趣的。以下是隨着時間的推移處理器使用情況,在屏幕A和B之間切換。我們可以看到有一個特定的Thread-14,它可以做很多事情!

processor over time

+1

好吧,你必須問自己..與A屏幕相比,B屏幕有什麼不同?我在我的遊戲中遇到了主要的優化問題(我還有一些小問題)。只有這樣,我才能找出造成問題的原因是打開或關閉,並觀察性能。 – hamobi 2015-02-11 09:30:52

+0

謝謝,這就是我正在做的事情:把事情打開和關閉......奇怪的是A和B之間沒有區別。[A B]只是一個SKScene,其高度是設備的兩倍。我懷疑spritekit cullig系統有一個缺陷,但這很容易說明它來自於sdk。 – Martin 2015-02-11 09:40:36

+0

您是否在稍後刪除節點的情況下添加節點?也許發佈一些相關的代碼。它可能是很多東西 – hamobi 2015-02-11 09:41:47

回答

0

好的我發現了!我使用一些SKEffectNode作爲從未改變的節點樹的根,屬性爲shouldRasterize = YES(爲了緩存的目的,我在網上看到了這個提示,但我不記得在哪裏,但現在我想知道是否這真的被佔用了......你覺得怎麼樣?)。

我注意到,這些節點的shouldEnableEffects屬性都設置爲YES初始化後,儘管蘋果文檔中的描述:

如果此屬性的值是YES,效果節點應用 過濾器並混合結果。如果值爲NO,則忽略效果節點 ,並且其子元素正常呈現。默認值是 編號。

顯然蘋果文檔是至少在iOS8的默認值是錯誤的。

我相信瘋狂的線程處理一些混合效果,因爲設置每SKEffectNode::shouldEnableEffects爲NO後,線程就再也沒有回來。但是,我仍然不明白爲什麼只發生在屏幕B上的錯誤。