2016-02-15 71 views
3

我用默認的新遊戲項目做了一個遊戲,然後插入了一個普通的UIView作爲應用程序的介紹場景。因爲'升級'了介紹,因此使用SKScene,並使用按鈕將原始gameViewController推入堆棧。一旦遊戲視圖被加載,它似乎有點遲緩,所以我假設這是與2個完整的skscenes和視圖控制器的開銷。我甚至設置了着陸場景暫停,但它顯然仍然使用內存!處理多個SKScenes的最佳方法是什麼?

我的問題是,我如何使用SKScene作爲着陸頁(使用它自己的LandingViewController),然後有效地將GameViewController添加到堆棧。我試過合併2個視圖控制器,但這似乎是一個愚蠢的做事方式。

當前設置:

LandingViewController 
|-LandingScene 

GameViewController 
|- GameViewScene 
|- Other Game Classes 

應用處進入LandingViewController其中inits的LandingScene(和降落UI精靈)。 LandingViewController處理觸摸事件,如按鈕等。當新遊戲被點擊時,GameViewController被推送(當前使用Segue)和GameViewController進入它的場景,遊戲狀態,UI,遊戲板等.GameViewController處理觸摸事件的場景。當遊戲結束時(點擊結束遊戲或遊戲結束狀態),GameViewController彈出。

LandingViewController和GameViewController都控制着它們的動畫和點擊流等,所以GameViewController可以做遊戲邏輯,就像下一個回合結束遊戲等一樣。 任何幫助或指針將不勝感激,因爲我想這樣做是正確的!

+0

嗯,你能指定什麼是滯後於你嗎?除非你不斷地釋放和更新資源,否則使用大量內存不會造成滯後,所以你可能還有其他的事情你不知道。 – Knight0fDragon

+0

我在GameScene上移動的精靈反應較慢並且動畫較慢。這隻有一次我有了2個景觀的場景。我不會根據@Whirlwind – Designer023

回答

5

具有單一視圖控制器和多個場景

你可以使用單一視圖控制器(實際上是SpriteKit遊戲模板的默認狀態)並有多個場景。

所以你將有GameViewControllerLandingScene,GameScene和可能的一些其他場景,如LevelSelect場景或類似的東西。

GameViewController中,您首次初始化場景。所以這就是初始化你的LandingScene(我猜這是你實現導航菜單的地方)。

因此,從這一點開始,您可以使用SKView'spresentScene:方法(也可以選擇使用SKTransition類)從您想要的任何場景進行轉換。

過渡

SpriteKit轉型可以用兩種不同的方式一般都做:

有些人可能會告訴你,讓從當前場景的轉換,到下一個場景是「壞設計」,並且當前場景應該通知視圖控制器關於其準備過渡狀態,以便視圖控制器可以進行所需的轉換。但在回答的是,這些都是從報價文檔:

之間轉換的兩個場景

通常情況下,你過渡到基於遊戲或用戶 輸入一個新的場景。例如,如果用戶按下主菜單 場景中的按鈕,則可能會轉換到新場景以配置玩家想要玩的比賽 。

和相關代碼:

- (void)mouseUp:(NSEvent *)theEvent 
{ 
    [self runAction: self.buttonPressAnimation]; 
    SKTransition *reveal = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0]; 
    GameConfigScene *newScene = [[GameConfigScene alloc] initWithSize: CGSizeMake(1024,768)]]; 
    [self.scene.view presentScene: newScene transition: reveal]; 
} 

可以清楚地看出,過渡到下一個場景是當前場景內完成。

2.使用上述使用委託模式的方法,其中場景委託過渡到視圖控制器的責任。

這兩種方式都很好,第一種方法有點方便IMO,並且被廣泛使用。因此,您可以輕鬆地在SpriteKit之間瀏覽不同場景。

提示:

不要忘了覆蓋場景的dealloc(或deinit如果您使用SWIFT)方法,而在開發階段,以確保所有的場景都正確地釋放。

+0

的建議重新修改該功能。謝謝。我將嘗試重寫我必須負責的UIViewcontroller,然後切換場景。我只需要根據需要將所有功能移到每個場景中。 – Designer023

+0

好吧,所以我選擇了1,它完美的工作!非常感謝。我最終可能會最終轉移到2並最終使用委託,因爲儘可能少地在包含的視圖控制器中將它全部保留在場景中 – Designer023

相關問題