我可以初始化这个类,并查看我的粒子效果,但是子类不会调用init()或deinit。为什么呢?
class Particles: SKEmitterNode {
var test: Int?
override init() {
test = 1
super.init()
println("created particle emitter")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
println("destroyed particle emitter")
}
}
这是从GameScene()
调用的让particle = Particles(fileNamed:“test”)
我试过这个:
var particle:粒子?
viewDidLoad中:
particle = Particles(fileNamed:“test”)
答案 0 :(得分:3)
子类只能调用超类指定的初始化,因此无法调用super.init(fileNamed:)
。解决方法不是创建一个初始化器,而是创建一个类方法并在那里执行设置代码。
我复制了apple提供的代码来解压缩sks场景并将其更改为与您的发射器一起使用。该方法查找粒子文件(如果存在)并将其取消归档为粒子对象:
class Particles: SKEmitterNode {
var test: Int?
class func fromFile(file : String) -> Particles? {
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
var data = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
var archiver = NSKeyedUnarchiver(forReadingWithData: data)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKEmitterNode")
let p = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as Particles
archiver.finishDecoding()
//Perform any setup here
p.test=11
return p
}
return nil
}
}
并像这样使用它:
let p=Particles.fromFile("MyParticle")!
p.test=0
p.particleSpeed=10
addChild(p)