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/Objective-C - 节点内的触摸检测