Sprite kit EnumerateChildNodeWithName访问方法
我想按名称查找一些节点,然后在该节点上调用名为update的函数 具有以下代码:Sprite kit EnumerateChildNodeWithName访问方法,sprite-kit,swift2,Sprite Kit,Swift2,我想按名称查找一些节点,然后在该节点上调用名为update的函数 具有以下代码: encounter.enumerateChildNodesWithName(enemy) { node, stop in node.update() } 我无法调用update()方法。我的敌人类如下所示 class EnemyPrototype: SKSpriteNode, EnemySprite { func update(){} }
encounter.enumerateChildNodesWithName(enemy)
{
node, stop in
node.update()
}
我无法调用update()方法。我的敌人类如下所示
class EnemyPrototype: SKSpriteNode, EnemySprite
{
func update(){}
}
为什么它不起作用
我猜该节点引用的是SKSpriteNode类,而不是EnemyPrototype类
或者我只是错误地使用了EnumerateChildNodesWithName
谢谢。那是因为节点是SKNode。您必须将其向下转换为EnemyPrototype,如下所示:
encounter.enumerateChildNodesWithName("enemy"){ node , stop in
if let enemy = node as? EnemyPrototype {
enemy.update()
}
}
我假设downcast可能会失败(例如,如果您将不同类型的其他节点添加到遭遇节点),因此我使用条件downcast
as?
操作符,而不是as代码>此运算符的版本(强制向下广播)。这是因为节点是SKNode。您必须将其向下转换为EnemyPrototype,如下所示:
encounter.enumerateChildNodesWithName("enemy"){ node , stop in
if let enemy = node as? EnemyPrototype {
enemy.update()
}
}
我假设downcast可能会失败(例如,如果您将不同类型的其他节点添加到遭遇节点),因此我使用条件downcastas?
操作符,而不是as代码>此运算符的版本(强制向下广播)