【问题标题】:SpriteKit - How to detect which node to affect using tocuch?SpriteKit - 如何检测使用触摸影响哪个节点?
【发布时间】:2015-02-22 07:10:12
【问题描述】:

所以我有不同种类的敌人,每种都有多个敌人出现在屏幕上,我想当我触摸一个敌人时会影响它的健康,例如一个敌人需要被触摸 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”将有几个具有相同名称的节点,并且为每个节点指定一个特定的名称不是一种实用或有效的方法。 那么最好的方法是什么?

【问题讨论】:

    标签: sprite-kit touch


    【解决方案1】:

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

    class Enemy : SKSpriteNode {
        var health = 3
    }
    

    然后你的情况可能是这样的:

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

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

    【讨论】:

    • 我使用的是普通类而不是 SkSpriteNode 子类,因为这会因为它的强制初始化程序而弄乱我的代码。所以我很难将节点转换为敌人,因为敌人不是 SkSpriteNode。
    • 如果你只是创建一个 SKNode 的子类,它应该以同样的方式工作。此处使用的唯一功能是 SKNode 具有的“名称”属性。
    【解决方案2】:

    创建 3 个 SKNode “enemies1” “enemies2” “enemies3” 作为父节点,并将它们添加到场景中。

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

    然后,对于每个敌人,您可以检查其父级以了解它是哪种敌人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多