swift - 如何使用继承创建节点?

标签 swift sprite-kit

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

我使用以下代码:

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")
     }

}

如果您有任何答复,我将不胜感激。

最佳答案

您继承自 SKNode,它没有在屏幕上显示任何内容的属性。这就是为什么屏幕上没有显示任何内容。如果你想在屏幕上看到一些东西,你需要继承SKSpriteNode或其他具有可见属性的节点类,你可以在屏幕上看到。

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

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

关于swift - 如何使用继承创建节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54951855/

相关文章:

ios - 持续时间为 0.0 的 SpriteKit 自定义操作在第一次运行时被调用两次

ios - Swift - 使用 SpriteKit 提高移动节点的速度

ios - SKSpriteNode 跟随 CGPath 加上 SKAction

objective-c - SpriteKit - SKSpriteNode physicsBody 未形成 CGPath

swift - Swift 中的字符串格式可选参数

ios - 径向 CAGradientLayer 在运行时无法正确渲染

swift - 在菜单按钮之前和之间留出等宽的间距

swift - 如何从 [AnyObject] 数组中过滤某种类型的对象

ios - 如何从 SKscene 检测设备旋转

swift - 如何重定向所有 404 错误