我正在製作一個Sprite Kit應用程序,並在我的場景中添加了一個SKLabelNode。當我加載SKScene時,我注意到一個相當大的滯後尖峯。在剖析應用程序後,我發現它是通過創建帶有紙莎草字體的SKLabelNode(儘管字體無關緊要)。當我移除標籤時,場景幾乎立即啓動,但標籤需要額外的1-3秒。如何緩存或預加載SKLabelNode字體?
我很確定這是從加載字體的時候,因爲當我回到主菜單,再次玩遊戲,它立即再次啓動。
現在有辦法提前預加載字體,所以當玩家選擇的級別沒有很大的停頓嗎?
我正在製作一個Sprite Kit應用程序,並在我的場景中添加了一個SKLabelNode。當我加載SKScene時,我注意到一個相當大的滯後尖峯。在剖析應用程序後,我發現它是通過創建帶有紙莎草字體的SKLabelNode(儘管字體無關緊要)。當我移除標籤時,場景幾乎立即啓動,但標籤需要額外的1-3秒。如何緩存或預加載SKLabelNode字體?
我很確定這是從加載字體的時候,因爲當我回到主菜單,再次玩遊戲,它立即再次啓動。
現在有辦法提前預加載字體,所以當玩家選擇的級別沒有很大的停頓嗎?
我們有這個問題,事實證明我們根本就沒有使用「正確的」字體名稱。在我們的例子中,當實例化我們的SKLabelNode時,我們使用的是「Menlo」而不是「Menlo-Regular」,並且導致了幾秒的處罰。一旦我們使用正確的字體名稱,延遲不再發生。 (奇怪的是,SKLabelNode仍然找到了Menlo並使用了它,所以我們沒有立即明白我們的字體名稱是錯誤的。推測,延遲是由於系統必須找出合適的替代品而導致的。做得很好,找到了我們打算使用的字體,但是需要一段時間才能做到,因此需要延遲。)
我有同樣的問題。添加以下代碼到你的第一個場景,你的字體名稱:
SKLabelNode *preload = [SKLabelNode labelNodeWithFontNamed:@"Avenir"];
preload.text = @"text";
如果不提供文本也不會加載字體。請注意,您不需要將標籤作爲孩子添加到場景中。
自從我玩過該項目以來已經有一段時間了,但在看到這個答案後,我修改了它並添加了該代碼。它使一切變得更快。 – Exascale
偉大的,但沒有辦法被通知「完成」? (例如,一個塊)......我使用Avenir作爲我的UI,但Menlo(等寬)作爲比分計數器。標題場景加載非常快,但是當我第一次轉換到遊戲場景(加載第二種字體)時,需要2秒或更長時間才能做出反應... –
哦,等等...猜測'-labelFontWithfontNamed:'stalls(不會立即返回)直到完成,所以在啓動時調用它(在顯示視圖/場景之前等)應該做的伎倆? –
每次帶標籤的場景被加載時,或者只是第一次,這是否會發生? – LearnCocos2D
僅限第一次 – Exascale
在這種情況下,可能會在啓動遊戲時顯示帶有相同字體的(隱藏)標籤 – LearnCocos2D