swiftskspritenodetouchesmoved

Moving SKSpriteNode with finger only if it is of type Fruit (subclass of SKSpriteNode)


I am creating a game where the user can move some fruits around in the scene. I want to user to be able to move only the fruits and not any other SKSpriteNode in the scene, so I wrote the code below to implement it. However the code doesn't work properly as I can't seem to be able to drag any of my sprites around, but rather they change position only when I stop touching the screen and they don't move by much anyway.

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first
    if let location = touch?.location(in: self){
        let nodesTouched  = nodes(at: location)
        for node in (nodesTouched) {
            if node is Fruit{
            for t in touches {
                let locationMoved = t.location(in: self)
                node.position.x = locationMoved.x
                node.position.y = locationMoved.y
                }

            }
        }
    }


}

Anyone knows what's wrong with it?

Thanks in advance!


Solution

  • I found a solution to this, which was to basically set the physicsBody.affectedByGravity property to false for that specific Fruit instance every time I touch it, and then set it back to true as soon as I stop touching it. that makes it possible to drag all the fruits everywhere I want.