SpriteKit - 如何检测使用触摸影响哪个节点?

Posted

技术标签:

【中文标题】SpriteKit - 如何检测使用触摸影响哪个节点?【英文标题】:SpriteKit - How to detect which node to affect using tocuch? 【发布时间】: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”将有几个具有相同名称的节点,并且为每个节点指定一个特定的名称不是一种实用或有效的方法。 那么最好的方法是什么?

【问题讨论】:

【参考方案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” 作为父节点,并将它们添加到场景中。

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

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

【讨论】:

以上是关于SpriteKit - 如何检测使用触摸影响哪个节点?的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit:如何检测从节点外部开始的节点上的触摸

检测 SpriteKit 中节点特定区域的触摸

SpriteKit/Objective-C - 节点内的触摸检测

在 Spritekit 中更改场景,检测按钮上的触摸

在Sprite纹理中检测触摸而不是整个框架iOS Swift SpriteKit?

使用 spritekit 检测释放滑动 swift 时的坐标 [关闭]