使用SKSpriteNode的属性作为子类

时间:2017-11-28 11:11:06

标签: swift class inheritance subclass

这更像是关于Swift 4中的子类和继承的一般性问题。

在Apple的开发人员指南中,自定义类(“anySuperclass”)的子类(“anySubclass”)可以直接访问/继承父类的属性,例如:

anySubclass.anyProperty = xyz(anyProperty仅在超类中定义)

我的问题:

我目前正在使用SpriteKit制作我的第一款游戏,并希望创建SKSpriteNode的子类,其中一个应该是clBackGround。

如果我只是将它定义为SKSpriteNode的子类,即

class clBackGround:SKSpriteNode {
}

我认为我可以简单地使用与SKSpriteNode相关的所有属性,如下所示:

var bg1 = clBackGround()

bg1.size = ...
.
.
.

但这似乎并不奏效。所以我的问题是:

我是否需要初始化我想在clBackGround中使用的SKSpriteNode的所有属性(使用指定的初始化程序)?我怎样才能将图像分配给该子类的实例?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

不确定这是否是您所要求的,但是,通常,如果您创建对象的子类,则无需执行任何特殊操作来访问超类的属性。它们将以通常的方式初始化。

但是,如果你有自己的子类初始化器,你必须确保以适当的方式调用超类的初始化器。

对于SKSpriteNode的子类,如果为子类定义自己的初始值设定项,则初始化程序将需要调用指定的超类初始值设定项,该初始值设定项传递纹理,颜色和大小以用于精灵:< / p>

init(enemyType:String) {
    let texture = SKTexture(imageNamed: "enemy_\(enemyType)")
    let color = UIColor.black
    let size = texture.size()
    super.init(texture: texture, color: color, size: size)
}