У меня есть несколько программно сделанных SKSpriteNode. Некоторые из них я хочу перемещаться, некоторые из них хотят быть статичными (имеют фиксированную позицию). При добавлении физики к узлам (нужно, чтобы иметь возможность обнаружения конфликтов, правильно?) И установите physicsBodyXXXX.dynamic = false
, они остаются в том же положении, когда перемещают другой объект над ними. Хорошо!Как сделать SKSpriteNode с фиксированным положением (после добавления физики)?
Но, я все еще могу захватить узел, который я хочу статически позиционировать, и перемещать их. Как я могу замаскировать узел, который я не хочу перемещать в функции touch? Или есть другое решение?
Пытался найти недвижимость как static
, который сделал положение узла фиксированной, но не могу найти его ...
Вот мой код для авто генераторных узлов (в override func didMoveToView(view: SKView)
:
for Character in englishWord{
// Make letters:
let letterToMove = SKSpriteNode(imageNamed: "\(Character)")
//then setting size and position
var physicsBodyLetterToMove = SKPhysicsBody(rectangleOfSize: letterToMove.size)
physicsBodyLetterToMove.affectedByGravity = false
physicsBodyLetterToMove.allowsRotation = false
physicsBodyLetterToMove.dynamic = false
letterToMove.physicsBody = physicsBodyLetterToMove
self.addChild(letterToMove)
// Make empty boxes for the letters:
let letterRecBox = SKSpriteNode(imageNamed: "EmptyBox")
//then setting size and position
var physicsBodyLetterRecBox = SKPhysicsBody(rectangleOfSize: letterRecBox.size)
physicsBodyLetterToMove.affectedByGravity = false
physicsBodyLetterRecBox.dynamic = false
letterRecBox.physicsBody = physicsBodyLetterRecBox
self.addChild(letterRecBox)
}
Так Прикосновения функ-х:
var selected: [UITouch: SKNode] = [:]
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
selected = [:]
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
selected[touch as UITouch] = nodeAtPoint(location)
}
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
for (touch, node) in selected{
if !contains([self], node){
let action = SKAction.moveTo(location, duration: 0.1)
node.runAction(SKAction.repeatAction(action, count: 1))
}
}
}
}
Любая идея