来自自定义类的 Swift addChild
Posted
技术标签:
【中文标题】来自自定义类的 Swift addChild【英文标题】:Swift addChild from Custom Class 【发布时间】:2018-08-02 14:47:45 【问题描述】:我有问题。
我制作了 swift 自定义类 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 中复制该函数,它就可以工作。
谁能帮我做错了什么?
非常感谢
【问题讨论】:
【参考方案1】:我会像这样重组这个类:
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,因此它不能被添加到任何场景中。
【讨论】:
【参考方案2】:因为 self.scene?
在子类中是 nil
,而它不在 GameScene
中,所以在将节点作为子类添加到场景后,它会被分配为 scene?
self.scene?.addChild(mysprite)
//
所以你可以这样做
let tes = test()
self.scene?.addChild(tes)
tes.test_function()
【讨论】:
以上是关于来自自定义类的 Swift addChild的主要内容,如果未能解决你的问题,请参考以下文章
为啥自定义 UIRefreshControl 类的背景颜色在 Swift 中没有改变?