来自自定义类的Swift addChild

时间:2018-08-02 14:47:45

标签: swift class sprite-kit skspritenode swift-class

我有问题。

我制作了swift自定义类test.swift,并希望将此类中的sprite添加到GameScene.swift

这是我的自定义类

import SpriteKit
import GameplayKit

var scene = GameScene()


class test: SKSpriteNode{


    func test_function(){

        let mysprite = SKSpriteNode(imageNamed: "spark3")
        mysprite.name="sparkle4"
        mysprite.position = CGPoint(x: frame.midX, y: frame.midY)
        mysprite.setScale(8)
        mysprite.zPosition=2
        self.scene?.addChild(mysprite)


}


}

在GameScene中,我将此调用为

var new_class = test()

new_class.test_function()

但是精灵没有显示在应用程序中,并且我没有看到错误。

如果我直接在GameScene中复制该功能,它将起作用。

有人可以帮我做错什么吗?

非常感谢

2 个答案:

答案 0 :(得分:2)

由于self.scene?在子类内部nil,而不是在GameScene内部,因此在将其作为子级添加到场景后,节点得到了scene?的分配< / p>

self.scene?.addChild(mysprite)

//

所以您可以这样做

let tes = test()
self.scene?.addChild(tes)
tes.test_function()

答案 1 :(得分:2)

我会像这样重组类:

import SpriteKit

class test: SKSpriteNode {
    convenience init(n: String) {
        self.init(imageNamed: n)
        self.name="sparkle4"
        self.setScale(8)
        self.zPosition=2
    }

    override init(texture: SKTexture!, color: UIColor, size: CGSize) {
        super.init(texture: texture, color: color, size: size)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

,以便您可以更轻松地创建其他实例。然后在GameScene.swift中执行:

let mySprite = test(n: "spark3")
mySprite.position = CGPoint(x: frame.midX, y: frame.midY)
self.scene?.addChild(mysprite)

由于scene在您的函数中为nil,因此无法将其添加到任何场景,您将收到错误消息。