我正在使用Swift开发一个SpriteKit游戏,我需要继承SKSpriteNode . 在init()(不是覆盖)函数中,我初始化子类的属性然后调用super:
init(selector: Selector, delegateScene: SKScene, text: String, position: CGPoint) {
self.delegateScene = delegateScene
self.labelNode = SKLabelNode()
self.labelNode.position = CGPointZero
self.labelNode.text = text
self.selector = selector
super.init()
}
我在super.init()处设置了一个断点,并且在子类init的开头就发生了EXC_BAD_INSTRUCTION异常 . 这是错误:
(文件路径).swift:12:7:致命错误:使用未实现的初始化程序'init(texture:color:size :)'用于类'Energies.Button'
1 回答
如果从
SKSpriteNode
继承,则应调用指定的初始值设定项 . 在这种情况下,需要init(texture:color:size:)
. 因此,如果您使用的是图像或纹理,则需要像这样调用super.init
:请注意,您还需要在初始化时设置大小 .
但在这种情况下你可以忘记上面的内容,因为你不是在寻找
SKSpriteNode
的子类,而是SKNode
的子类 . 如果将声明中的超类从SKSpriteNode
更改为SKNode
,则应立即生效 .您还需要在
super.init()
之后添加您的标签添加到节点,否则您的标签将不会显示,您的节点将为空 .