如何使用继承创建节点?

时间:2019-03-01 20:28:53

标签: swift sprite-kit

我想从Unit创建一个子类GameScene.swift的节点。该代码可以执行,但是看不到节点。

我使用以下代码:

GameScene.swift

func setFirstUnit() {

    let myUnit = Unit(pHealthpoints: 10, pDamage: 5, pMovement: 1)
    myUnit.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
    self.addChild(myUnit)
}

Unit.swift

class Unit: SKNode{

     var healthPoints: Int
     var damage: Int
     var movement: Int
     var texture: SKTexture
     let knightTexture = "KnightBlueV2"

     init(pHealthpoints: Int, pDamage: Int, pMovement: Int) {

        healthPoints = pHealthpoints
        damage = pDamage
        movement = pMovement

        texture = SKTexture(imageNamed: knightTexture)

        let unit = SKSpriteNode(texture: texture)
        unit.zPosition = 4
        unit.setScale(1)

        super.init()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
     }

}

我将非常感谢您提供任何答案。

1 个答案:

答案 0 :(得分:0)

您是从SKNode继承的,后者没有属性可以在屏幕上显示任何内容。这就是为什么屏幕上什么都没有显示的原因。如果要在屏幕上看到某些内容,则需要从SKSpriteNode或具有可见属性的另一个节点类继承,您可以在屏幕上看到它们。

比从SpriteKit节点类之一继承继承更好的解决方案。与其使用继承,不如使用合成。为Unit类提供一个SKSpriteNode类型的属性,并使用该属性加载纹理,移动该单元并在屏幕上显示该单元。

class Unit {
    sprite: SKSpriteNode
    // Rest of class here.
}