2015-04-03 4 views
0

У меня есть следующая функция, которая порождает квадраты и добавляет их в массив квадратов. Это добавляет новые квадраты до бесконечности, пока функция не будет остановлена. Массив квадратов объявлен в SKScene следующим образом: var rsArray = [RedSquare]().Обнаруживать привязки на SKNode в массиве

func spawnRedSquares() { 
    if !self.gameOver { 
     let rs = RedSquare() 
     var rsSpawnRange = self.frame.size.width/2 
     rs.position = CGPointMake(rsSpawnRange, CGRectGetMaxY(self.frame) + rs.sprite.size.height * 2) 
     rs.zPosition = 3 
     self.addChild(rs) 
     self.rsArray.append(rs) 

     let spawn = SKAction.runBlock(self.spawnRedSquares) 
     let delay = SKAction.waitForDuration(NSTimeInterval(timeBetweenRedSquares)) 
     let spawnThenDelay = SKAction.sequence([delay, spawn]) 
     self.runAction(spawnThenDelay) 
    } 
} 

Я пытаюсь использовать функцию touchesBegan() определить, когда конкретный квадрат в массиве сливают, а затем получить доступ к свойствам квадрата. Я не могу понять, как определить, какой квадрат касается. Как мне это сделать?

ответ

0

Я смог ответить на свой вопрос, поэкспериментировав, и решил, что отправлю ответ, если у кого-то была аналогичная проблема. Код, который мне нужен внутри функции touchesBegan(), был следующим:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    for touch: AnyObject in touches { 
     let location = touch.locationInNode(self) 
     let rsCurrent = self.nodeAtPoint(location) 
     for RedSquare in rsArray { 
      let rsBody = RedSquare.sprite.physicsBody 
       if rsBody == rsCurrent.physicsBody? { 
        //Action when RedSquare is touched 
      } 
     } 
    } 
} 
0

Дайте каждому из квадратов вы создадите уникальное имя и проверьте это имя в touchhesBegan. Вы можете использовать счетчик и сделать

rs.name = "square\(counter++)" 

В touchesBegan вы можете получить имя прикоснулся узла и проверить его с именами узлов в массиве.

0

Сначала вы должны указать rs node имя. Например

rs.name = "RedSquare" 

Затем вы можете использовать функцию nodeAtPoint найти узел на конкретной точки касания. Если узел является RedSquare, его можно изменить.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    for touch in touches { 

     let touchPoint = touch.locationInNode(self) 
     let node = self.nodeAtPoint(touchPoint) 

     if node.name == "RedSquare" { 
      // Modify node 
     } 

    } 
} 
+0

По какой-то причине я не могу заставить это работать. Я попытался добавить имя «RedSquare» 'либо в функцию' spawnRedSquares', либо в класс 'RedSquare', но в любом случае ничего не происходит, когда происходит крана. –