2016-09-14 62 views
1

是否可以將SKSpriteNode添加到另一個類的場景中?是否可以將SKSpriteNode添加到另一個類的場景中?

*這些例子

所以我有一個SKScene與自定義類..

class MainMenu: SKScene { 

    code... 

} 

而另一SKScene與自定義類..

class GameOver: SKScene { 

    code... 

} 

我有另一個類所謂的PopupMenu ...

class PopupMenu: SKScene { 

    func addSprite() { 

    theSprite = SKSpriteNode.init(imageNamed: "theImage") 
    theSprite.position = CGPointMake(self.frame.width/2, self.frame.height/2) 
    theSprite.zPosition = 2 

    self.addChild(theSprite) 

} 

所以我想實現的是能夠點擊這兩個MainMenu的場景和場景GAMEOVER顯示菜單按鈕,並能夠調用從PopupMenu的功能到該節點添加到相應的場景。

我可以寫在每個場景類別彈出的代碼實現這一點,但我覺得這是不這樣做的可重用性方面的最佳途徑。

有沒有更好的方式來做到這一點?

回答

2

如果你想讓你的遊戲效果很好,做的第一件事就是要確保,當你通過一個新的場景,一個場景被釋放。 我想你可以建立一個共同的菜單或通用菜單按鈕,自定義類和任何地方調用它,你想:

class MenuButton : SKSpriteNode 
{ 
    var length: CGFloat! 

    override init(texture: SKTexture!, color: SKColor!, size: CGSize) { 
     self.length = 50 // default lenght 
     super.init(texture: texture, color: color, size: size) 
    } 

    convenience init(color: SKColor, length: CGFloat = 50) { 
     var size = CGSize(width: length, height: length); 
     self.init(texture:nil, color: color, size: size) 
     self.length = length 
    } 

    required init?(coder aDecoder: NSCoder) { 
     // Decoding length here would be nice... 
     super.init(coder: aDecoder) 
    } 
} 
+0

我的意思是,你可以創建一個自定義類(一個新的文件)的F或者你的菜單按鈕繼承SKSpriteNode方法,所以您希望自定義按鈕,只需你打電話讓myBtn = MenuButton.init下一次(...) –

+0

@AlessandroOrnano,我不知道這個答案。你只是在談論如何檢查代碼以確保取消分配,並展示如何創建子類的代碼 – Knight0fDragon

+0

@ Knight0fDragon你在開玩笑嗎?這是進行定製的一種自然方式,有幾種方式,這是其中之一。我不是在這裏做佣金的工作,而是提供建議和說明方法來找到正確的方法。你的答案是我不喜歡的另一種方法,因爲我覺得它不像裸體代碼那樣容易定製,但它可以工作。 –

4

看爲SKReferenceNodes,您可以創建通過SpriteKit場景生成器的彈出式菜單,然後保存這是一個sks文件。當需要使用它時,您只需拉起彈出式菜單的文件,然後將其添加到場景中。

來源:https://developer.apple.com/reference/spritekit/skreferencenode

如果你打算不使用SKS生成器(我建議使用,因爲它只是真棒,節省大量的時間),你可以做的另一件事,是繼承你的彈出菜單一個SKSpriteNode,不是一個場景

class PopupMenu: SKSpriteNode { 

    required init?(coder: aDecoder:NScoder) { 
     super.init(coder:aDecoder)  
    }  

    override init(texture: SKTexture!, color: SKColor!, size: CGSize) { 
     super.init(texture: texture, color: color, size: size) { 
    } 

    convenience init() { 
     self.init(imageNamed: "theImage") 
     self.zPosition = 2  
    } 


} 

然後在場景中的代碼,只需調用

let popup = PopupMenu() 
popup.position = CGPointMake(self.frame.width/2, self.frame.height/2) 
self.addChild(popup) 
+0

這很有趣,我從來沒有這樣做,但如果我這樣做,但它會如何工作呢?如果它只是一個sks文件,菜單的代碼將來自何處? –

+1

...在同一個地方任何其他代碼的背後是,設置在SKS建設者 – Knight0fDragon

+0

現場我不知道,因爲我只有通過代碼SpriteKit遊戲工作的自定義類領域。我不使用SKS構建器,因爲它在Xcode 7上非常麻煩。它會清除我的節點,有時會刪除所有內容,儘管我保存了。 –

相關問題