我希望按名称找到一些节点,然后在该节点上调用名为update的函数。
有以下代码:
encounter.enumerateChildNodesWithName(enemy)
{
node, stop in
node.update()
}
我无法调用方法update()我的敌人类看起来像这样
class EnemyPrototype: SKSpriteNode, EnemySprite
{
func update(){}
}
为什么不起作用?
我猜这个节点是引用SKSpriteNode类而不是EnemyPrototype类。
或者我只是错误地使用EnumerateChildNodesWithName?
感谢。
答案 0 :(得分:0)
那是因为该节点是SKNode。你必须将它转发给EnemyPrototype,如下所示:
encounter.enumerateChildNodesWithName("enemy"){ node , stop in
if let enemy = node as? EnemyPrototype {
enemy.update()
}
}
我认为向下转换可能会失败(例如,如果您在遇到节点时添加了不同类型的其他节点),那么我使用条件向下转换as?
运算符而不是as!
版本(强制向下转换)操作