我有一个基本的敌人类,它是SKSpriteNode的子类,我有另一个子类。在我的GameScene中,当我尝试从该子类初始化一个对象时,一切都很完美,但是当我尝试创建该对象的副本时,我收到一个错误:
fatal error: use of unimplemented initializer 'init(texture:color:size:)'
该错误指的是基本类Enemy而不是子类EnemyA
敌人基本课程:
class Enemy: SKSpriteNode {
init(image: String, health: Int, damage: CGFloat, moveSpeed: CGFloat){
let texture = SKTexture(imageNamed: image)
super.init(texture: texture, color: UIColor.clearColor(), size: texture.size())
}
EnemyA子类:
class EnemyA: Enemy {
override init(image: String, health: Int, damage: CGFloat, moveSpeed: CGFloat) {
super.init(image: image, health: health, damage: damage, moveSpeed: moveSpeed)
}
在GameScene中创建克隆:
let enemyA = EnemyA(image: "Enemy_Sprite0", health: 10, damage: 20, moveSpeed: 5)
let clone = enemyA.copy() as! SKSpriteNode
clone.position = CGPoint(x: size.width / 2, y: size.height / 2)
addChild(clone)
答案 0 :(得分:0)
我遇到了类似的问题,试图复制SKSpriteNode的子类。我的解决方案是覆盖copy()函数(在子类中)。在重写的copy()函数中,我调用/使用了子类的自定义初始化程序 - 我的自定义初始化程序调用super.init(texture:color:size)。传递子类副本中必要的init参数似乎可以解决问题。