2015-04-23 93 views
1

我有一個for循環中實例5個精靈這樣不能刪除竊聽:斯威夫特

for enemy in 1...5 { 
    negativeOnComing = SKSpriteNode(imageNamed: "Enemy3") 
    negativeOnComing.physicsBody = SKPhysicsBody(circleOfRadius: negativeOnComing.frame.size.width/2) 
    negativeOnComing.physicsBody?.dynamic = true 
    negativeOnComing.physicsBody?.categoryBitMask = PhysicsCategory.negativeOncoming 
    negativeOnComing.physicsBody?.fieldBitMask = PhysicsCategory.negativeOncoming 
    negativeOnComing.physicsBody?.contactTestBitMask = PhysicsCategory.mainCenterNode | PhysicsCategory.positiveOncoming 
    negativeOnComing.physicsBody?.node?.name = "negativeOnComing" 
self.addChild(negativeOnComing) 

} 我已經聲明的變量作爲全球

var negativeOnComing : SKSpriteNode! 

現在我希望能夠移除一旦點擊就被點擊的精靈。要嘗試這個我沒

func removeNegativeOncoming(negativeOnComingR:SKSpriteNode){ 
    println("Tapped") 
    childNodeWithName("negativeOnComing")?.removeFromParent() 
     } 


override func touchesBegan(touches: NSSet, withEvent event: UIEvent){ 
    var touch = touches.anyObject() as UITouch 
    var touchPosition = touch.locationInNode(self) 
    var enemyNodePosition = negativeOnComing.childNodeWithName("negativeOnComing")?.position 
    var enemyNodeFrame = negativeOnComing.frame 
    func removeEnemyNode (UITouch) -> SKSpriteNode { 
     if (enemyNodeFrame.contains(touchPosition)) { 
      removeNegativeOncoming(negativeOnComing) 
     } 
     return negativeOnComing 
    } 
    mainSpriteMovement(touch) 

} 

現在,這個功能其實並刪除精靈但是,它不會刪除這正是拍了拍精靈,但在隨機的5個精靈的只有一個。我的問題是,我怎麼才能讓這個精靈只能被刪除,而不是隨機的一個。希望這個問題能夠得到很好的解答。謝謝大家

回答

1

您正在創造5個敵人,但每次都設置negativeOnComing,所以這個變量最終只會持有對創建的最後一個節點的引用。

但是,這不是你的問題的原因。您正在使用childNodeWithName來查找要移除的節點 - 但所有敵方節點都有相同的名稱,因此您隨機獲得一個節點。

您可以簡單地使用nodeAtPoint確定哪個節點被竊聽 -

override func touchesBegan(touches: NSSet, withEvent event: UIEvent){ 
    var touch = touches.anyObject() as UITouch 
    var touchPosition = touch.locationInNode(self) 
    var touchedNode = self.nodeAtPoint(touchPosition) 
    if (touchedNode.name == "negativeOnComing") { 
     touchedNode.removeFromParent() 
    } 
    mainSpriteMovement(touch) 

} 
+0

是!這真是個訣竅,我很慶幸能加入這樣一個有才華的開發者社區!謝謝 –