Pat Walsh
Pat Walsh

Reputation: 11

Filtering Fast User Touch Input

I am coding an app in sprite-kit and swift where when you touch the screen a sprite(the player) throws a projectile at another sprite moving towards it. If the player hits the other sprite then the projectile and the sprite disappear. A problem with the game is that if the player rapidly touches the screen he can easily run up his score in the game. How can I make the code only recognize that the screen is being touched every let's say .3 seconds?

Upvotes: 1

Views: 58

Answers (1)

Lou Franco
Lou Franco

Reputation: 89172

In SpriteKit/GameplayKit games, most of your code is running inside a game loop where you are constantly being passed the current time. That's what this function in an SKScene is:

override public func update(_ currentTime: TimeInterval) {
}

In here it's common to keep track of time and enable/disable things. To keep it simple:

  1. Add the following vars

    var firingEnabled = true
    var enableFiringAtTime: TimeInterval = 0
    var currentTime: TimeInterval = 0
    
  2. When they fire, add this code

    if firingEnabled {
        firingEnabled = false
        enableFiringAtTime = self.currentTime + 0.3
        // your fire code here
    }
    
  3. And in the update override

    self.currentTime = currentTime
    if currentTime > enableFiringAtTime {
        firingEnabled = true
    }
    

Upvotes: 1

Related Questions