来自自定义类的 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 中没有改变?

包含自定义类的数组总和(Swift)

如何在 Swift 中增加自定义 UINavigationBar 类的高度

Swift:在 Core Data 中存储自定义类的数组

在swift 3中显示来自自定义单元格的警报

Swift:来自 XIB 文件的多个自定义 TableViewCell