2015-07-09 3 views
2

У меня есть 3 массива узлов, каждый массив с 5 узлами. Узлы в этом примере представляют собой квадраты.TouchBegan/TouchEnded with Array

Я хочу переместить их с помощью touchhesBegan и touchesEnded, сохраняя, какой массив коснулся пользователь, а затем положение пальца, когда он удаляется с экрана. Я уже знаю, как это сделать, с узлом.

Моя проблема в том, что я не знаю, как сообщить моему коду, какой массив перемещать, так как я не могу использовать что-то вроде array.name, чтобы сказать разницу, как я могу это сделать?

Например, если я коснусь своего Array1, он обнаружит, что его мой Array1, а затем, когда я удаляю палец, он сделает SKAction, чтобы переместить узлы внутри моего массива.

Я попытался использовать массив.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

Thats приятно. =) Его умный способ получить группу узлов. Большое спасибо! – Gusfat