Cj Miller
Cj Miller

Reputation: 51

Sprite Kit Creating Separate Class

Attempting to design a game using Sprite-Kit I found that it would be easier to create a seperate class for one of my game objects being a laser from a ship. Within that class I would have some functions maybe such as updating, shooting etc. But whenever I create another class none of the variables I make are "declared". This is my code

import UIKit
import SpriteKit

class laser: SKSpriteNode {

let laser : SKSpriteNode = SKSpriteNode(imageNamed:"playerShip")
laser.position = CGPoint(x: 100, y: 200)//This is where it says no declaration


}

enter image description here

Upvotes: 0

Views: 220

Answers (1)

Simon Mo
Simon Mo

Reputation: 772

This is because you need to initiate the class.

In your example you would need to do the following which would allow you instantiate a laser like this laser()

class laser: SKSpriteNode {
    let laser: SKSpriteNode = SKSpriteNode(imageNamed: "playerShip")

    init() {
        super.init(texture: nil, color: .clear, size: laser.size)
        laser.position = CGPoint(x: 100, y: 200)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    } 
}

But you probably really wanted this, which allows you to instantiate a laser like this let aLaser = laser("playerShip"). Then you can change the position like this alaser.position = CGPoint(x: 100, y: 200).

This method allows you to change the sprite and position easily for different lasers. Unless your game only has one laser.

class laser: SKSpriteNode {

    init(_ imageName: String) {
        let texture: SKTexture = SKTexture(imageNamed: imageName)

        super.init(texture: texture, color: .clear, size: texture.size())
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

Upvotes: 2

Related Questions