2015-12-14 45 views
0

開發一個Mac上用埃爾卡皮坦和Xcode的7.2:的Mac OS X埃爾卡皮坦和一個以上的雪碧套件SKView

如果我有一個窗口的一個項目,具有用於SpriteKit一個SKScene,那麼我會得到所需的60 fps,一切按預期工作。但是,一旦我定義了第二個窗口,其中第一個窗口只有30 fps,即使第二個窗口根本沒有使用,第二個窗口甚至不會被定義爲Referencing Outlet。第二個窗口只存在於MainMenu.xib中,根本不使用。

我需要四個Sprite Kit Windows一個場景在我的項目,所以我得到一個非常糟糕的更新性能。程序工作與優勝美地罰款,但只要我在埃爾卡皮坦運行它們,這個問題就會發生。

我會很幸運的有任何建議。舊版Xcode和最新版本(7.2)的問題是一樣的。我編譯了幾個月前的最新程序,新程序,都有同樣的問題,所以我認爲它與Xcode無關,但與El Capitan Mac OS無關。

當設置SKView「核心動畫層」,在Xcode「MainMenu.xib」對話框頁「查看效果督察」並檢查所有的SKViews設置成「核心動畫層」,然後小動畫一切都很好。只要60 fps無法恢復,因爲場景中有太多物體,View只會每秒更新一次,這看起來很可怕。使用優勝美地,場景每秒更新30次,這對我的目的來說已經足夠了。

因爲這不取決於Xcode版本,所以似乎蘋果已經改變了一些東西來「優化」屏幕重繪,如果不可能達到60 fps,那麼繪圖不是以30 fps或任何其他是可能的,但只有1 fps。我也在「屬性檢查器」頁面上嘗試過「可以同時繪製」,但這完全沒有區別。我使用帶D700圖形的新型8核Mac Pro。所以這不應該是原因。

我還試圖限制屏幕更新myView.frameInterval = 30從我預計每秒只有兩個更新。但是這個命令似乎完全沒有。無論是真是假,myView.allowsTransparency = ...都會產生一個異常。 myView.asynchronous = true使得更新如同優勝美地一樣平滑。但是需要30秒左右的時間才能下拉菜單(當然,節點數量很大),並且無法使用該程序。這是 - 在結果中 - 與Xcode中的「Can Draw Concurrently」選項不同。

是否有可能更改爲優勝美地渲染,因爲所有描述的選項似乎都不是最優的。

任何想法如何處理大節點數或限制更新率,以便程序可以通過菜單舒適地退出?

回答

0

我現在已經開發了一種解決方法。通過一些額外的代碼,我在Yosemite和El Capitan獲得了相同的結果。 El Capitan的表現比優勝美地快兩倍。

  1. SKView」必須「MainMenu.xib」設置爲「Core Animation Layer」或者,你會看到沒有雪碧在所有
  2. 您可以定義儘可能多的「SKViews」只要你想。我只示出了一個作爲
  3. AppDelegate類觀的界定需要一些更多的代碼的示例:

    class AppDelegate: NSObject, NSApplicationDelegate 
    { 
        @IBOutlet var myWindow1: NSWindow! 
        @IBOutlet var mySKView1: SKView! 
    
        // other functions here as needed 
    
        func applicationDidFinishLaunching (aNotification: NSNotification) 
        { 
         let scene_size = CGSizeMake(1280.0, 800.0) // For example 1280x800 Pixel 
         let myScene1 = myScene1Class(size: scene_size) 
         mySKView1.scaleMode = .ResizeFill // works for me better than ".AspectFill" 
         mySKView1.ignoresSiblingOrder = false 
         mySKView1.asynchronous = true // This makes the difference in smooth Display-Speed 
         mySKView1.showsFPS = false 
         mySKView1.showsNodeCount = false 
         mySKView1.presentScene(myScene1) 
         mySKView1.paused = true // This makes the difference in Event-Handling 
         // Start your Main-Program-Process here 
        } 
    } 
    
  4. 的「可以得出兼」選項「MainMenu.xib」可以被設置或沒有,這都沒有區別

屏幕更新添加精靈和示出窗口時自動啓動。當我在「AppDelegate」中呈現場景時,不會出現任何精靈。這是通過我爲每個程序自動初始化完成的。

如果你願意,你可以玩兩個選項「mySKView1.asynchronous = true」和「mySKView1.paused = true」。如果您將其中一個設置爲「false」,則可以看到問題。請注意,您必須定義多個節點才能使此問題可見,因爲如果您的Mac由於節點較少而達到60 fps,則無論選擇哪種選項,一切看起來都很好。並且您將在一個或多個Windows中包含兩個「SKViews」或更多。

測試130000(130k!)個節點,製作大約20fps。測試260000(260k!)節點,製作大約10 fps。另外三個「SKViews」定義爲無精靈來測試整個事情。

相關問題