Как мне создать узел, используя наследование? - PullRequest
0 голосов
/ 01 марта 2019

Я хотел бы создать узел подкласса 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 голосов
/ 02 марта 2019

Вы наследуете от SKNode, у которого нет свойств для отображения чего-либо на экране.Вот почему на экране ничего не появляется.Если вы хотите что-то увидеть на экране, вам нужно наследовать от SKSpriteNode или другого класса узлов с видимыми свойствами, которые вы можете видеть на экране.

Для вас есть лучшее решение, чем наследование от одного из узлов SpriteKitклассы.Вместо использования наследования используйте композицию.Присвойте классу Unit свойство типа SKSpriteNode и используйте это свойство для загрузки текстур, перемещения и отображения модуля на экране.

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