2016-09-08 5 views
2

私の主なGameSceneにSKSceneを追加したいと思います。 SKReferenceNodeは良い解決策であるようです。SKReferenceNode/SKSceneをSpriteKitの別のSKSceneに追加

私が持っている: - GameScene.sks(メインシーン) - Countdown.sks(GameSceneに追加するシーン) - Countdown.swift

(これを初期化するためにどうするか、カスタムクラス、SKScene SKReferenceNode SKNodeを???)

カウントダウンを使用してカウントダウンをプログラムで追加する方法がわかりません。

私が試した:私ものような、よりシンプルなものを試みた

Could not cast value of type 'SKReferenceNode' (0x10d97ad88) to 'LYT.Countdown' (0x10a5709d0 

let cd=Countdown(scene:self) 
self.addChild(cd) 

をしかし、私は方法がわからない

let path = Bundle.main.path(forResource: "Countdown", ofType: "sks") 
let cd = SKReferenceNode (url: NSURL (fileURLWithPath: path!) as URL) as! Countdown 
cd.name = "countdown" 
self.addChild(cd) 

をしかし、私は次のエラーを持っていますCountdown.sksファイルを使用してクラスを初期化します。

SKNodeクラスを作成してプログラムで100%初期化することもできますが、Xcodeシーンエディタを使用するには、関連する.sksファイルを使用することが重要です。

+0

を見つけるために拡張したものであるカウントダウンがFUNC更新を使用しているあなたのように聞こえますか?あなたは2つのSKSceneを1つに追加することはできませんが、SKSpriteNodeやSKNodeのようなCountdownをサブクラス化してSKReferenceNodeの中で使用することができます。 –

+0

@SimonePistecchia SKNodeでサブクラス化すれば、 "class Countdown:SKReferenceNode" sksファイルを使って私のノードを初期化しますか? – cmii

答えて

5

私はこれを行うための最善の方法ですが、動作するかどうか、私は知らない、ということを実行します。

私は2ファイルDragon.swiftとSKS

enter image description here

をした私は」 DragonNodeこの

enter image description here

の他のノードの子のような「メイン」ノードを追加しまし、DragonNodeはそれを設定し、カスタムクラスでありますSKSファイル:SKSceneコードで

enter image description here

enter image description here

DragonNodeがあるシーン内の正常SKSpriteNode

class DragonNode: SKSpriteNode, Fly, Fire { 

    var head: SKSpriteNode! 
    var body: SKSpriteNode! 
    var shadow: SKSpriteNode! 
    var dragonVelocity: CGFloat = 250 

    required init?(coder aDecoder: NSCoder) {   
     super.init(coder: aDecoder) 

     //Example other node from sks file 
     body = self.childNodeWithName("Body") as! SKSpriteNode 
     head = body.childNodeWithName("Head") as! SKSpriteNode 
     shadow = self.childNodeWithName("Shadow") as! SKSpriteNode 
     shadow.name = "shadow" 
    } 

    //Dragon Func 
    func fireAction() {} 
    func flyAction() {} 
} 

、SKReferenceNodeを追加

let dragonReference = self.childNodeWithName("DragonReference") as! SKReferenceNode 

    let dragonNode = dragonReference.getBasedChildNode() as! DragonNode 
    print(dragonNode) 
    //Now you can use the Dragon func 
    dragonNode.flyAction() 

getBasedChildNode()はあなたのベースのノード(最初の1)

extension SKReferenceNode { 
    func getBasedChildNode() -> SKNode? { 
     if let child = self.children.first?.children.first {return child} 
     else {return nil} 
    } 
} 
+0

興味深い拡張機能 –

関連する問題