2015-12-31 101 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