问题描述
我有一个游戏,它有 3 个 SKSpriteNodes
,用户可以使用 touchesBegan
和 touchesMoved
四处移动.但是,当用户移动 nodeA
并经过另一个名为 nodeB
的节点时,nodeB
会跟随 nodeA
等等.
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.
我创建了一个 SKSpriteNodes
数组,并使用 for-loop
让生活更轻松.
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
}
}
}
}
除了 nodeA
移动并与 nodeB
交叉路径时,一切正常,nodeB
跟随 nodeA
.
Everything is working except when nodeA
is moving and cross paths with nodeB
, nodeB
follows nodeA
.
我怎样才能使当用户移动 nodeA
并且 nodeA
通过 nodeB
时 nodeB
不会跟随 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
}
}
}
这篇关于使用 SpriteKit 一次移动多个节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!