创建子类副本时出错

时间:2016-05-02 23:38:11

标签: sprite-kit skspritenode

我有一个基本的敌人类,它是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)

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,试图复制SKSpriteNode的子类。我的解决方案是覆盖copy()函数(在子类中)。在重写的copy()函数中,我调用/使用了子类的自定义初始化程序 - 我的自定义初始化程序调用super.init(texture:color:size)。传递子类副本中必要的init参数似乎可以解决问题。