Ios 访问循环中添加的精灵节点以调用类继承方法?
我已经创建了许多SKSpriteNodes,将它们添加到for循环中的场景中Ios 访问循环中添加的精灵节点以调用类继承方法?,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我已经创建了许多SKSpriteNodes,将它们添加到for循环中的场景中 func addBlocks(number : Int) { for _ in 1...number { let block = Obstacle() addChild(block) } } 因为它们是在这个循环中创建的,所以我不能调用block.myMethod()。我当然可以调用childNodeWithName(“block”)来执行它作为节点继承的东西,比如.
func addBlocks(number : Int) {
for _ in 1...number {
let block = Obstacle()
addChild(block)
}
}
因为它们是在这个循环中创建的,所以我不能调用block.myMethod()
。我当然可以调用childNodeWithName(“block”)
来执行它作为节点继承的东西,比如.removeFromParent()
。
如果我想调用在障碍类(SKSpriteNode的子类)中实现的方法,我应该怎么做。SKSpriteNode的障碍子类
假设您有障碍
,定义如下
class Obstacle: SKSpriteNode {
func explode() { }
}
有名字的障碍物
如果向场景添加障碍物
,则可以向节点添加名称,如
func addBlocks(number : Int) {
for i in 1...number {
let block = Obstacle()
block.name = "block_\(i)" // <-- like here
addChild(block)
}
}
在下面的代码中,如果强制转换失败(这意味着返回的值不是障碍物
,则控制台上会打印一条错误消息)。
否则,如果成功将该值转换为do障碍
,则可以调用添加到障碍
的任何方法
func explodeObstacle(i: Int) {
guard let obstacle = self.childNodeWithName("block_\(i)") as? Obstacle else {
debugPrint("Could not find an Obstacle with name block_\(i)")
return
}
obstacle.explode()
}