我正在使用Sprite Kit制作游戏,我希望能够在屏幕上移动时拖放它们。
这里是代码的要点:我在计时器上生成这些框,然后它们向下移动。
override func didMoveToView(view: SKView) {
let timer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("spawnBox"), userInfo: nil, repeats: true)
}
func spawnBox() {
/* Set up the box */
addChild(box)
let boxMoveDown = SKAction.moveToY(-100, duration: 5.0)
let actionDone = SKAction.removeFromParent()
box.runAction(SKAction.sequence([boxMoveDown, actionDone]))
}
但问题是我如何移动一个特定的孩子,我触摸它而不会影响所有其他孩子'?据我所知,目前,每次我制作一个盒子时它都完全一样,所以当我设定一个孩子的位置时,我无法具体说明。
这里有什么内容我的触摸开始和触及移动功能
if let touch = touches.first {
let location = touch.locationInNode(self)
let objects = nodesAtPoint(location) as [SKNode]
if objects.contains(nodeAtPoint(location)) && nodeAtPoint(location).name == "box" {
box.position = location
box.removeAllActions()
}
}
- box.position = location
就是这样
需要改变。
希望你理解我的想法。我已经尝试将所包含的代码保留在必要的内容中。我对Sprite Kit很新,你可能会说。
答案 0 :(得分:1)
如果我是你,我会这样处理:
为扩展SKSpriteNode
。
在此自定义类中,覆盖触摸属性。
然后根据位置在此功能中设置位置。
现在您需要担心的是zPosition
,无论具有最高zPosition的孩子是否会被触摸呼叫。
您无需担心nodesAtPoint
或不再担心,API将为您处理所有这些问题。