0

我有个问题。

我制作了 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 中复制该功能,它就可以工作。

谁能帮助我我做错了什么?

非常感谢

4

2 回答 2

2

因为self.scene?nil子类内部,而它不在内部GameScene,所以在将节点scene?作为子类添加到场景后,它会被分配

self.scene?.addChild(mysprite)

//

所以你可以这样做

let tes = test()
self.scene?.addChild(tes)
tes.test_function()
于 2018-08-02T14:52:37.090 回答
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,因此无法将其添加到任何场景中。

于 2018-08-02T15:06:46.783 回答