【发布时间】:2014-12-04 01:03:59
【问题描述】:
我有几个以编程方式制作的 SKSpriteNode。其中一些我想四处走动,一些我想保持静止(有一个固定的位置)。当向节点添加物理(需要能够进行碰撞检测,对吗?)并设置physicsBodyXXXX.dynamic = false 时,它们在将其他对象移动到它们上方时保持在相同的位置。没关系!
但是,我仍然能够抓取我想要静态定位的节点,然后移动它们。如何屏蔽掉我不想在触摸功能中移动的节点?还是有其他解决方案?
试图找到像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)
}
所以 touches func 的:
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))
}
}
}
}
有什么想法吗?
【问题讨论】:
标签: swift sprite-kit skphysicsbody touches