我正在使用 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() 处设置了一个断点,EXC_BAD_INSTRUCTION 异常紧接着在子类的 init 开始时发生。这是错误:
(file path).swift: 12: 7: fatal error: use of unimplemented initializer 'init(texture:color:size:)' for class 'Energies.Button'
最佳答案
如果你继承自SKSpriteNode
,你应该调用指定的初始化器。在这种情况下,它需要是 init(texture:color:size:)
。因此,如果您使用图像或纹理,则需要像这样调用 super.init
:
super.init(texture: texture, color: nil, size: CGSize(width: 100, height: 100))
请注意,您还需要在初始化时设置大小。
但是在这种情况下你可以忘记上面的,因为你不是在寻找SKSpriteNode
的子类,而是SKNode
的子类。如果您将声明中的父类(super class)从 SKSpriteNode
更改为 SKNode
,它应该会立即工作。
您还需要在 super.init()
之后将您的标签添加到节点,否则您的标签将不会显示并且您的节点将为空。
关于swift - Swift 中的 super.init() 递归问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25761538/