Search code examples
xcodeswifttouchesbegan

How to limit the number of touches in touchesBegan in swift Spritekit


I have written a location finder for touch points in my touchesBegan function, I want to limit the number of touch points allowed in the view controller to 2 but I don't quite know how to do that. A little help would be fantastic.

  override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
   for touch: AnyObject in touches {
    let location = touch.locationInNode(self)


    Object.physicsBody?.affectedByGravity = true
    Object2.physicsBody?.affectedByGravity = true
    Object3.physicsBody?.affectedByGravity = true


    if Object.containsPoint(location) {
  Object.physicsBody?.velocity = CGVectorMake(0, 0)
    Object.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 135))

}

        if Object2.containsPoint(location) {
           Object2.physicsBody?.velocity = CGVectorMake(0, 0)
            Object2.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 135))
 }


        if Object3.containsPoint(location) {
            Object3.physicsBody?.velocity = CGVectorMake(0, 0)
            Object3.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 135))



    }

    }


        }

Solution

  • As you see touches is a Set struct object, and it has a cardinality, in this case touches.count So the point is to find this cardinality, compare it to 2 and perform action only if it is less than or equal to 2.

    So it goes like this

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        if touches.count <= 2 {
            for touch: AnyObject in touches {
                // do stuff
                }
            }
        }