2015-04-23 54 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

是!这真是个诀窍,我很庆幸能加入这样一个有才华的开发者社区!谢谢 –