How to add a sprite from another class on the gameScene

DamsoJilo Source

can anyone explain how to add a node to the gameScene please.

I subclassed my Boss class but i dont know how i can display my Boss1 on the 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)  
    }   
}

im using swift 4 and xcode 9

swiftxcodesprite-kitsknode

Answers

answered 6 months ago Ron Myschuk #1

You don't generally subclass the scene for instances such as this. More likely you are meaning to make boss a subclass of SKSpriteNode and adding it to your scene. While there is probably dozens of ways that you could subclass this, this is just 1 way.

Also worth noting that it is not generally acceptable practice to make your variable names capitalized, classes yes, variables no.

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

in GameScene you create an instance of the new class and position it and add it in the GameScene.

edit

the init function has a short cut in swift.

Boss()

is the same as

Boss.init()

you can also add custom parameters to your init in order to further clarify or add more features to your class. for example...

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

comments powered by Disqus