拖放相同精灵的子项

时间:2015-12-31 15:15:38

标签: swift sprite-kit

我正在使用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很新,你可能会说。

1 个答案:

答案 0 :(得分:1)

如果我是你,我会这样处理:

为扩展SKSpriteNode

的框节点创建自定义类

在此自定义类中,覆盖触摸属性。

然后根据位置在此功能中设置位置。

现在您需要担心的是zPosition,无论具有最高zPosition的孩子是否会被触摸呼叫。

您无需担心nodesAtPoint或不再担心,API将为您处理所有这些问题。