这更像是关于Swift 4中的子类和继承的一般性问题。
在Apple的开发人员指南中,自定义类(“anySuperclass”)的子类(“anySubclass”)可以直接访问/继承父类的属性,例如:
anySubclass.anyProperty = xyz(anyProperty仅在超类中定义)
我的问题:
我目前正在使用SpriteKit制作我的第一款游戏,并希望创建SKSpriteNode的子类,其中一个应该是clBackGround。
如果我只是将它定义为SKSpriteNode的子类,即
class clBackGround:SKSpriteNode {
}
我认为我可以简单地使用与SKSpriteNode相关的所有属性,如下所示:
var bg1 = clBackGround()
bg1.size = ...
.
.
.
但这似乎并不奏效。所以我的问题是:
我是否需要初始化我想在clBackGround中使用的SKSpriteNode的所有属性(使用指定的初始化程序)?我怎样才能将图像分配给该子类的实例?
非常感谢任何帮助!
答案 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)
}