2015-03-23 2 views
1

Я работаю над маленькой игрой для iOS.(Swift + Spritekit) - удалите узел и его данные целиком

У меня есть SKSpriteNode в моей сцене - когда я удаляю его с помощью «removeFromParent» и касаюсь области, в которой он был последним, я все еще получаю функцию.

Мой код выглядит следующим образом:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 

    for touch: AnyObject in touches { 
     let location = touch.locationInNode(self) 

     if tapToPlayNode.containsPoint(location){ 
      tapToPlayNode.removeFromParent() 
      startNewGame() 
     } 
    } 
} 

func startNewGame(){ 
    //Starts a new game with resetted values and characters in position 
    println("Ready.. set.. GO!") 

    //Shows the ui (value 1) 
    toggleUiWithValue(1) 
} 

Другими словами, я получаю "Ready .. установлен .. GO!" когда я касаюсь области даже после ее удаления.

Любые подсказки?

Bests,

ответ

2

Ваш tapToPlayNode все еще сохраняется самовывозом и удаляется из его родителей. Вы должны сделать это по желанию var tapToPlayNode:SKSpriteNode? и ноль это после того, как удалить его из его родителей, как это:

if let playNode = self.tapToPlayNode { 
    for touch: AnyObject in touches { 
    let location = touch.locationInNode(self) 

     if playNode.containsPoint(location) { 
      playNode.removeFromParent() 
      startNewGame() 
      self.tapToPlayNode = nil // il it here! 
      break 
     } 
    } 
} 

Вы также можете избежать сохранить ссылку на ваш tapToPlayNode и дать ему имя при инициализации, как это:

node.name = @"tapToPlayNodeName" 
// Add node to scene and do not keep a var to hold it! 

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
/* Called when a touch begins */ 

    // Retrieve the ode here 
    let tapToPlayNode = container.childNodeWithName("tapToPlayNodeName")! 
    for touch: AnyObject in touches { 
     let location = touch.locationInNode(self) 

     if tapToPlayNode.containsPoint(location){ 
      tapToPlayNode.removeFromParent() 
      startNewGame() 
     } 
    } 
} 
+0

Большое спасибо за ваш быстрый ответ, Bsarr! Один быстрый пример: когда я использую «var tapToPlayNode: SKSpriteNode?» Кажется, я не могу текстурировать узел. – user2026507

+0

EDIT: Я решил это! Большое спасибо, за помощь Bsarr! – user2026507

+0

@ bsarr007 Нужно ли nil SKSpriteNode после перезапуска новой игры или она все еще работает после удаления ее из родителя перед началом новой игры? В настоящее время мне нужно стереть список дополнительных SKSpriteNodes, но он, похоже, не работает, установив их на нуль после их удаления из родителя. Благодарю. –

Смежные вопросы