Swift addChild из пользовательского класса

У меня проблема.

Я сделал быстрый пользовательский класс test.swift и хочу добавить спрайт из этого класса в 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 ответа

Так как self.scene? является nil внутри подкласса, пока он не внутри GameScene, узел получает это scene? назначается после того, как вы добавили его как ребенка в сцену

self.scene?.addChild(mysprite)

//

Таким образом, вы можете сделать это так

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

Я бы перестроил класс следующим образом:

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 это ноль в вашей функции, поэтому он не может быть добавлен ни к одной сцене.

Другие вопросы по тегам