我有问题。
我制作了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中复制该功能,它将起作用。
有人可以帮我做错什么吗?
非常感谢
答案 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,因此无法将其添加到任何场景,您将收到错误消息。