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