I have a game that has 3 SKSpriteNodes
that the user can move around using the touchesBegan
and touchesMoved
. However, when the users moves nodeA
and passes another node called nodeB
, nodeB
follows nodeA
and so on.
I created an array of SKSpriteNodes
and used a for-loop
to make life easier.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let nodes = [nodeA, nodeB, nodeC]
for touch in touches {
let location = touch.location(in: self)
for node in nodes {
if node!.contains(location) {
node!.position = location
}
}
}
}
Everything is working except when nodeA
is moving and cross paths with nodeB
, nodeB
follows nodeA
.
How can I make it so that when the user is moving nodeA
and nodeA
passes through nodeB
that nodeB
would not follow nodeA
.
Instead of doing slow searches, have a special node variable for your touched node
class GameScene
{
var touchedNodeHolder : SKNode?
override func touchesBegan(.....)
{
for touch in touches {
guard touchNodeHandler != nil else {return} //let's not allow other touches to interfere
let pointOfTouch = touch.location(in: self)
touchedNodeHolder = nodeAtPoint(pointOfTouch)
}
}
override func touchesMoved(.....)
{
for touch in touches {
let pointOfTouch = touch.location(in: self)
touchedNodeHolder?.position = pointOfTouch
}
}
override func touchesEnded(.....)
{
for touch in touches {
touchedNodeHolder = nil
}
}
}