以前は、シーンエディタを使用して複雑なSKSpriteNodesを作成することはできますか? @Anton Rogachevskyiの助けを借りてthe previous question私はunarchiveNodeFromFileを使用して.SKSファイルの位置を突き止めました。私は予想通りにsksファイルを読み込みますが、現在のシーンに追加しようとすると何も表示されません。私がaddChild行を壊して、プレビューウィンドウに適切に表示されるオブジェクトをプレビューすると、正しいファイルが見つかることがわかります。 sksファイルの中にカスタムダイアログクラスがあり、 "required init?(coder aDecoder:NSCoder)"にブレークポイントを設定すると、カスタムオブジェクトが正しく初期化されていることがわかります。ダイアログクラスの内部SpriteKitで親に追加されたときにアーカイブされていないノードが表示されない
私はプログラムでは、これは私が見つける方法ですクラスの初期化
class TeamDialog: SKSpriteNode {
init(size: CGSize) {
super.init(texture: nil, color: .red, size: size)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup() {
let pinkBox = SKSpriteNode(color: .magenta, size: CGSize(width: 100, height: 100))
pinkBox.zPosition = 500
addChild(pinkBox)
}
}
、シーン内に達しないことを示すために、オブジェクトにピンク色のボックスを追加オブジェクトやシーンにそれを追加しようと、それはプレビューで表示されますが、何も画面に現れない
private func displayDialog() {
if let wtf = unarchiveNodeFromFile(file: "TeamDialog")! as SKNode? {
let layer = SKSpriteNode(color: .clear, size: self.size)
layer.zPosition = 5000
layer.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
addChild(layer)
for child in wtf.children {
print("child \(child.name)")
if let teamDialog = child as? TeamDialog {
teamDialog.removeFromParent()
layer.zPosition = 1
layer.addChild(teamDialog)
}
}
}
}
func unarchiveNodeFromFile(file: String) -> SKNode? {
if let path = Bundle.main.path(forResource: file, ofType: "sks") {
let fileData = NSData.init(contentsOfFile: path)
let archiver = NSKeyedUnarchiver.init(forReadingWith: fileData as Data!)
archiver.setClass(SKNode.classForKeyedUnarchiver(), forClassName: "SKScene")
let node = archiver.decodeObject(forKey: NSKeyedArchiveRootObjectKey) as! SKNode
archiver.finishDecoding()
return node
} else {
return nil
}
}
また、プレビューウィンドウで見ることができますが、シーンに追加すると何も表示されません。
シーンに追加する前に、別の方法でアーカイブされていないオブジェクトを処理する必要がありますか?
私はコードを取り出し、同じ結果を持つテストプロジェクトに入れました。
私は運を持つシーンに(ノードなど)SKSファイルを追加しようとした、と私はSKSファイルからダイアログを隔離し、問題がwasn
これらの質問は素晴らしいです。他のすべてのレベルの徹底的で興味深いものです。 – Confused
ありがとう、私はそれを感謝します。SpriteKitのポイントは、Appleが機能やサポートを強化するのを待っているのが失われた原因のように思えるから、より多くの機能を使い始める必要があるということです。 –
メモリから、iOS 8〜9はSpriteKitに追加された機能よりも多くのバグを発見しました。 iOS 10はSKWarpNodeを振っている草を追加しました。それ以外は忘れました。確かに** _素晴らしい_ **でした。 – Confused