2015-07-09 34 views
2

我有3個節點陣列,每個陣列有5個節點。這個例子中的節點是正方形。TouchBegan/TouchEnded與陣列

我想要使用touchesBegan和touchesEnded移動它們,保存用戶觸摸的數組,然後從屏幕移除時手指的位置。我已經知道如何用節點來做到這一點。

我的問題是,我不知道如何告訴我的代碼移動什麼數組,因爲我不能使用像array.name這樣的東西來告訴差異我該如何做這樣的事情?

例如,如果我觸摸我的Array1,他會檢測到它是我的Array1,然後當我移開手指時,他會執行SKAction來移動Array1中的節點。

我試圖使用array.description,但沒有奏效。

謝謝。

回答

1

由於Sprite Kit提供了訪問場景節點樹中精靈的簡便方法,幾乎​​沒有理由使用數組來管理精靈節點。在這種情況下,您可以添加一組精靈SKNode,因爲您可以輕鬆訪問精靈與node = sprite.parent中的「容器」。然後你可以遍歷node.children遍歷該容器中的精靈。這裏有一個如何做一個例子:

var selectedNode:SKSpriteNode? 

override func didMoveToView(view: SKView) { 
    scaleMode = .ResizeFill 

    let width = view.frame.size.width 
    let height = view.frame.size.height 

    let colors = [SKColor.redColor(), SKColor.greenColor(), SKColor.blueColor()] 

    // Create 3 container nodes 
    for i in 1...3 { 
     let node = SKNode() 
     // Create 5 sprites 
     for j in 1...5 { 
      let sprite = SKSpriteNode(imageNamed:"Spaceship") 
      sprite.color = colors[i-1] 
      sprite.colorBlendFactor = 0.5 
      sprite.xScale = 0.125 
      sprite.yScale = 0.125 
      // Random location 
      let x = CGFloat(arc4random_uniform(UInt32(width))) 
      let y = CGFloat(arc4random_uniform(UInt32(height))) 
      sprite.position = CGPointMake(x, y) 
      // Add the sprite to a container 
      node.addChild(sprite) 
     } 
     // Add the container to the scene 
     addChild(node) 
    } 
} 

選擇一個精靈在touchesBegan

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    for touch in (touches as! Set<UITouch>) { 
     let location = touch.locationInNode(self) 
     let node = nodeAtPoint(location) 
     selectedNode = node as? SKSpriteNode 
    } 
} 

移動將所選的精靈

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) { 
    for touch in (touches as! Set<UITouch>) { 
     let location = touch.locationInNode(self) 
     selectedNode?.position = location 
    } 
} 

旋轉所有的孩子在節點包含精選精靈

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { 
    if let parent = selectedNode?.parent?.children { 
     for child in parent { 
      let action = SKAction.rotateByAngle(CGFloat(M_PI*2.0), duration: 2.0) 
      child.runAction(action) 
     } 
    } 
    selectedNode = nil 
} 
+0

那很好。 =)它是獲得一組節點的一種巧妙方式。多謝! – Gusfat