2015-12-31 61 views
0

我正在使用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])) 
} 

但问题是我怎么能打动特定孩子这我不影响其他所有的“孩子”摸?我明白,目前,每次我产生一个盒子时,它都完全一样,所以当我设置一个孩子的位置时,我不能具体。

这里是里面有什么我的touchesBegan和touchesMoved功能

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

当您检测到选择了一个节点时,您需要删除使节点向下移动的“SKAction”。 – 0x141E

回答

1

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

用于扩展SKSpriteNode你的盒子节点创建一个自定义类。

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

然后根据位置设置此功能内的位置。

现在你所需要担心的是你的zPosition,无论哪个孩子的zPosition最高,都会被接触到。

你不必担心nodesAtPoint或什么不再,API将为你处理所有这些。

+0

恰恰是k在想什么。 – Fogmeister

+0

我该如何解决这个问题? –

+0

通常我不介意在涉及复杂问题时提供代码,但在这种情况下,由于我已经解释了您需要执行的基本原则,因此我不打算这么做,所以最好对您进行研究和理解发生了什么,而不是仅仅复制和粘贴。我已经按照原来的步骤打破了答案,所以通过我的答案不应该很难。 – Knight0fDragon