SpriteKit - 如何使用触摸检测要影响的节点?

时间:2015-02-22 07:10:13

标签: sprite-kit touch

所以我有不同类型的敌人,每种都有多个敌人出现在屏幕上,我想当我触摸敌人时我会影响它的健康,例如敌人需要被触摸3次才能死亡(删除来自父母)。我的问题是我不知道检测同类敌人的最佳方法是什么。

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

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

            if let body = self.nodeAtPoint(location) as? SKSpriteNode {

               if node.name == "enemy1" {
                   //Affect health
               }
               if node.name == "enemy2" {
                   //Affect health

            }
        }
    }

这是我现在的代码,但你可以看到它不对,因为“enemy1”将有几个具有相同名称的节点,并且给每个节点一个特定的名称不是一种实用或有效的方式。 那么最好的方法是什么呢?

2 个答案:

答案 0 :(得分:0)

您可以尝试制作SKSpriteNode的自定义子类,以跟踪敌人的健康状况。您的精灵文件可能如下所示:

class Enemy : SKSpriteNode {
    var health = 3
}

然后你的情况可能如下:

if node.name == "enemy1" {
    (node as Enemy).health--;
}

当然,我给出的示例代码过于简化,但您明白了。如果每个敌人都由它自己的类代表,那么计算机可以单独跟踪它。

答案 1 :(得分:0)

创建3个SKNodes" enemies1" " enemies2" " enemies3"它将充当父节点,并将它们添加到场景中。

然后,不是在创建场景时直接将敌人节点添加到场景中,而是将它们添加为相应父节点的子节点。

然后,对于每个敌人,你可以检查它的父母,看看它是哪种敌人。