Iain Coleman
Iain Coleman

Reputation: 406

How do I only allow one instance of an SKSpriteNode on screen at one time?

This is my first ever post - I have searched for a long time and could not find the answer.

I am making a game with SpriteKit and want the player to be able to only launch one bomb at a time- i.e they can't fire again until the previous bomb has exploded or gone off screen. Currently when the player taps the screen, they can launch as many bombs as they want.

Any help would be greatly appreciated!

Thanks, Iain

Upvotes: 1

Views: 48

Answers (2)

Fluidity
Fluidity

Reputation: 3995

Steve's idea works out well and is better than mine, but here is a more novice-friendly explanation IMO... Put this in your gamescene :)

var canFireMissile = true

func fireMissile() {
  guard canFireMissile else { return }

  canFireMissile = false   // So you can't fire anymore missiles until 0.5secs later

  let wait     = SKAction.wait(forDuration: 0.5) // the duration of the missile animation (example)
  let reset    = SKAction.run { canFireMissile = true } // lets us refire the missile
  let sequence = SKAction.sequence([wait, reset])
  run(sequence)
}

override func mouseDown(with event: NSEvent) { // touchesBegan on iOS
  fireMissile()
}

Upvotes: 1

Steve Ives
Steve Ives

Reputation: 8134

Create a SKSpriteNode property for your misssile. Create an SKAction for the movement of the missile and give the action a key so you can refer to it by name). When the fire button is pressed, check to see if the named action is already running; if it is, do nothing, otherwise run the ‘fireMissile’ action.

Upvotes: 1

Related Questions