如何在 gameScene 上添加来自另一个 class 的精灵

How to add a sprite from another class on the gameScene

谁能解释一下如何将节点添加到 gameScene。

我子class编辑了我的 Boss class 但我不知道如何在 GameScene 上显示我的 Boss1

class Boss: GameScene {
    var gameScene : GameScene!
    var Boss1 = SKSpriteNode(imageNamed: "boss1")

    override func didMove(to view: SKView) {

        Boss1.position = CGPoint(x: size.width * 0.1, y: size.height * 0.5)
        Boss1.zPosition = 2

        self.gameScene.addChild(Boss1)  
    }   
}

我使用 swift 4 和 xcode 9

您通常不会将 class 场景用于此类实例。更有可能你的意思是让 boss 成为 SKSpriteNode 的子 class 并将其添加到你的场景中。虽然可能有许多方法可以子class this,但这只是一种方法。

还值得注意的是,将变量名大写通常是不可接受的做法,class是的,变量没有。

class Boss: SKSpriteNode {

    init() {

        let texture = SKTetxure(imageNamed: "boss1")
        super.init(texture: texture , color: .clear, size: texture.size())

        zPosition = 2
        //any other setup such as zRotation coloring, additional layers, health etc.
    }   
}

...meanwhile back in GameScene

class GameScene: SKScene {

    let boss1: Boss!

    override func didMove(to view: SKView) {

        boss1 = Boss()
        boss1.position = CGPoint(x: size.width * 0.1, y: size.height * 0.5)
        self.gameScene.addChild(boss1)  
    }   
}

在 GameScene 中,您创建新 class 的实例并将其定位并添加到 GameScene 中。

edit

init 函数在 swift 中有一个快捷方式。

Boss()

相同
Boss.init()

您还可以向您的 init 添加自定义参数,以进一步阐明或向您的 class 添加更多功能。例如...

class Boss: SKSpriteNode {

    private var health: Int = 0

    init(type: Int, health: Int, scale: CGFloat) {

        let texture: SKTetxure!

        if type == 1 {
            texture = SKTetxure(imageNamed: "boss1")
        }
        else {
            texture = SKTetxure(imageNamed: "boss2")
        }
        super.init(texture: texture , color: .clear, size: texture.size())

        self.health = health
        self.setScale(scale)
        zPosition = 2
        //any other setup such as zRotation coloring, additional layers, health etc.
    }   
}