Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift SKEmitterNode的子类不调用init或deist_Swift_Sprite Kit - Fatal编程技术网

Swift SKEmitterNode的子类不调用init或deist

Swift SKEmitterNode的子类不调用init或deist,swift,sprite-kit,Swift,Sprite Kit,我可以初始化这个类,并看到我的粒子效果,但子类不调用init()或deinit。为什么? class Particles: SKEmitterNode { var test: Int? override init() { test = 1 super.init() println("created particle emitter") } required init?(coder aDecoder: NSCod

我可以初始化这个类,并看到我的粒子效果,但子类不调用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")
    }
}
这是从GameSecene()调用的

让粒子=粒子(文件名为:“测试”)

我试着这样做:

粒子:粒子

viewDidLoad:


particle=Particles(fileNamed:“test”)

子类只能调用超类指定的初始化器,因此不能调用
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)

子类只能调用超类指定的初始化器,因此不能调用
super.init(filename:)
。一种解决方法是根本不生成初始化器,而是生成一个类方法并在其中执行设置代码。 我复制了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)

子类只能调用超类指定的初始化器,因此不能调用
super.init(filename:)
。一种解决方法是根本不生成初始化器,而是生成一个类方法并在其中执行设置代码。 我复制了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)

子类只能调用超类指定的初始化器,因此不能调用
super.init(filename:)
。一种解决方法是根本不生成初始化器,而是生成一个类方法并在其中执行设置代码。 我复制了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)



您是如何创建您的
Particles
实例的?我尝试了多种方法:var particle=Particles(文件名:“test”)、let particle=Particles(文件名:“test”)、var particle:Particles?谢谢你的帮助。很抱歉,当我开始我的句子时,我按了回车键。再次感谢,我真的很感激。我个人开始觉得斯威夫特还没有准备好迎接黄金时间。它似乎一路和你搏斗。是的,是的。对于我发现的
fileNamed
应该是一个方便的初始值设定项,因此应该调用
init
。。。我已经开始用C/Objective-C编写我的部分应用程序了,因为这样的事情……你是如何创建你的
Particles
实例的?我尝试了多种方法:var particle=Particles(filename:“test”)、let particle=Particles(filename:“test”)、var particle:Particles?谢谢你的帮助。很抱歉,当我开始我的句子时,我按了回车键。再次感谢,我真的很感激。我个人开始觉得斯威夫特还没有准备好迎接黄金时间。它似乎一路和你搏斗。是的,是的。对于我发现的
fileNamed
应该是一个方便的初始值设定项,因此应该调用
init
。。。我已经开始用C/Objective-C编写我的部分应用程序了,因为这样的事情……你是如何创建你的
Particles
实例的?我尝试了多种方法:var particle=Particles(filename:“test”)、let particle=Particles(filename:“test”)、var particle:Particles?谢谢你的帮助。很抱歉,当我开始我的句子时,我按了回车键。再次感谢,我真的很感激。我个人开始觉得斯威夫特还没有准备好迎接黄金时间。它似乎一路和你搏斗。是的,是的。对于我发现的
fileNamed
应该是一个方便的初始值设定项,因此应该调用
init
。。。我已经开始用C/Objective-C编写我的部分应用程序了,因为这样的事情……你是如何创建你的
Particles
实例的?我尝试了多种方法:var particle=Particles(filename:“test”)、let particle=Particles(filename:“test”)、var particle:Particles?谢谢你的帮助。很抱歉,当我开始我的句子时,我按了回车键。再次感谢,我真的很感激。我个人开始觉得斯威夫特还没有准备好迎接黄金时间。它似乎一路和你搏斗。是的,是的。对于我发现的
fileNamed
应该是一个方便的初始值设定项,因此应该调用
init
。。。我已经开始用C/Objective-C编写我的部分应用程序,因为这样的事情……首先,p.test=0或p.test!=0导致崩溃。第二,我真的很想理解这种语言。init(filename:name)是一个初始值设定项,所以它必须调用它的init,对吗?那么为什么它不调用Particles.init()?另外,我不知道是否正在调用deinit,或者我只是在某个地方发生了泄漏。这将返回一个Particles对象,而我的另一个代码则返回一个SKEmitterNode对象。抱歉,我甚至没有测试我的其他代码。但是为什么我们不能使用fileNamed?首先,p.test=0或p.test!=0导致崩溃。第二,我真的很想理解这种语言。init(filename:name)是一个初始值设定项,所以它必须调用它的init,对吗?那么为什么它不调用Particles.init()?另外,我不知道是否正在调用deinit,或者我只是在某个地方发生了泄漏。这将返回一个Particles对象,而我的另一个代码则返回一个SKEmitterNode对象。抱歉,我甚至没有测试我的其他代码。但是为什么我们不能使用fileNamed?首先,p.test=0或p.test!=0导致崩溃。第二,我真的很想理解这种语言。init(filename:name)是一个初始值设定项,所以它必须调用它的init,对吗?那么为什么它不调用Particles.init()?另外,我不知道是否调用了Denit,或者我只是在某个地方发生了泄漏。