2016-09-14 11 views
1

別のクラスのシーンにSKSpriteNodeを追加することはできますか?別のクラスのシーンにSKSpriteNodeを追加することはできますか?

*これらは、私は別のクラスを持っている

class GameOver: SKScene { 

    code... 

} 

..カスタムクラスと

class MainMenu: SKScene { 

    code... 

} 

、別のSKScene ...だから私は、カスタムクラスでSKSceneを持っている例

です...の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 SceneとGameOver Sceneの両方でShowメニューボタンをクリックし、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を作成することができるということですまたはあなたのMenuButtonがSKSpriteNodeメソッドを継承しているので、次にmyBtn = MenuButton.init(...) –

+0

@AlessandroOrnanoを呼び出すだけで、カスタムボタンを次に呼び出すときに、これが質問に答えるかどうかわかりません。割り当て解除を確実にするためにコードをチェックする方法と、サブクラスを作る方法を示すコードを書く方法について話しているだけです。 – Knight0fDragon

+0

@ Knight0fDragon私を冗談にしていますか?これはカスタマイズを行うための自然な方法ですが、いくつかの方法がありますが、これもその1つです。手数料に関する仕事をするのではなく、正しい方法を見つけるためのアドバイスや方法の説明をするためにここにはいません。あなたの答えは、ヌードコードができるほど深くカスタマイズするのは簡単ではないと思うので、私が気に入っていない別の方法ですが、うまくいく可能性があります。 –

4

SKReferenceNodesに見て、あなたが保存し、SpriteKitベースシーンビルダを経由して、あなたのポップアップメニューを作成することができますこれはsksファイルです。それを使う時間が来たら、ポップアップメニューのファイルをプルアップしてシーンに追加するだけです。

出典:あなたが行うことができますhttps://developer.apple.com/reference/spritekit/skreferencenode

もう一つは、あなたが(それだけで素晴らしいと膨大な時間の節約であるので、私は使用をお勧めします)SKS Builderを使用していないことを計画している場合、としてあなたのポップアップメニューをサブクラス化することです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 Builderを使っていません。なぜなら、Xcode 7では非常にバグが多いからです。ノードをクリアして、節約してもすべてを削除することがあります。 –

関連する問題