在SpriteKit场景编辑器中使用自定义SKNodes

7
我想使用我的自定义SKNode子类创建一个层。我尝试将SKNode添加到场景编辑器中,并使用“自定义类”选项卡指定所需的类,但这并没有起作用。节点仍然为空,运行模拟器时不会显示任何内容。此外,为了确保该类实际有效,我通过编程方式向场景添加了一个实例来查看它是否显示,结果是可以显示的。
如何通过场景编辑器添加自定义节点到场景中?
这是我的自定义类代码:
class Player: SKSpriteNode {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        print("Test")
        self.addChild(SKSpriteNode(imageNamed: "Player.png"))
    }
}
2个回答

6
有两件事情你需要做:
1) 设置自定义类时,必须使用应用程序名称作为类名的前缀;例如: My_App_Name.MyClass,其中_代表一个空格。
2) 你的SKNode子类需要实现required init?(coder aDecoder: NSCoder)方法。
例如,在我的项目中名为'MyGame':

enter image description here

class MyNode: SKSpriteNode {
    // Set this after the node has been initaliser by init(coder:)
    var someStat: Int = 0

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        // To check it worked:
        print("Yup, all working")
    }
}

好的,我已经完成了这个任务,在我的编码器初始化中,我添加了一个带有图形的SKSpriteNode到节点中,但是如果没有代码,它仍然不会在我的场景中显示出来。 - Youssef Moawad
嗯...这很奇怪;对我来说它肯定是有效的。你尝试过清理并再次运行它吗?你想要设置自定义类的节点是什么类型的? - ABakerSmith
你介意贴出你自定义子类的代码吗? - Youssef Moawad
哪个精灵节点没有被添加?你能在编辑器中看到已经添加的精灵节点吗?你确定有一个名为“Player.png”的图片吗?尝试只用“Player”... - ABakerSmith
是的,我确定我有这张图片,在代码中创建节点并将其添加到场景时它就出现了。但是在编辑器中它并没有出现。 - Youssef Moawad
显示剩余4条评论

0
我在Xcode 8中也遇到了同样的问题。可能听起来很蠢,但是要应用一个自定义类,我必须在运行之前保存 .sks 文件。
与文本文件或故事板不同,.sks 文件不会自动保存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接