Как добавить спрайт из другого класса в gameScene

кто-нибудь может объяснить, как добавить узел в gameScene, пожалуйста.

Я создал подкласс своего класса Boss, но не знаю, как отобразить Boss1 на GameScene.

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


person DamsoJilo    schedule 13.03.2018    source источник


Ответы (1)


Вы обычно не подклассифицируете сцену для таких случаев, как этот. Скорее всего, вы хотите сделать босса подклассом SKSpriteNode и добавить его в свою сцену. Хотя, вероятно, есть десятки способов создать подкласс, это всего лишь один из способов.

Также стоит отметить, что обычно не принято писать имена переменных с заглавной буквы, классы — да, переменные — нет.

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.
    }   
}

...тем временем в 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 вы создаете экземпляр нового класса, размещаете его и добавляете в GameScene.

редактировать

функция init имеет короткий путь в swift.

Boss()

такой же как

Boss.init()

вы также можете добавить пользовательские параметры в свой init, чтобы уточнить или добавить дополнительные функции в ваш класс. Например...

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.
    }   
}
person Ron Myschuk    schedule 13.03.2018
comment
спасибо за ответ, он сформулирован идеально, но я не понимаю, как использовать инициализацию, не могли бы вы объяснить мне это - person DamsoJilo; 13.03.2018
comment
Я попытался объяснить инициализацию больше в своем ответе. Я добавил правку внизу - person Ron Myschuk; 13.03.2018