gpt4 book ai didi

ios - 访问循环中添加的 Sprite 节点以调用类继承方法?

转载 作者:行者123 更新时间:2023-11-28 06:54:01 24 4
gpt4 key购买 nike

我已经创建了一些 SKSpriteNode,在 for 循环中将它们添加到场景中。

func addBlocks(number : Int) {
for _ in 1...number {
let block = Obstacle()
addChild(block)
}

}

因为它们是在这个循环中创建的,所以我不能调用 block.myMethod()。我当然可以调用 childNodeWithName("block") 来执行它作为节点继承的事情,例如 .removeFromParent()。想调用Obstacle类(SKSpriteNode的子类)实现的方法怎么办?

最佳答案

SKSpriteNode的障碍子类

假设您有如下定义的 Obstacle

class Obstacle: SKSpriteNode {
func explode() { }
}

有名称的障碍

如果你在场景中添加一个Obstacle,你可以为节点添加一个名称,例如

func addBlocks(number : Int) {
for i in 1...number {
let block = Obstacle()
block.name = "block_\(i)" // <-- like here
addChild(block)
}
}

通过名称检索 SKNode 并将其转换为 Obstacle

接下来,当您调用 self.childNodeWithName(...) 时,您会得到类似这样的东西 SKNode?

这意味着您可以接收 nil 或类似 SKNode 的东西。如果您相信(就像在这种情况下)返回的对象是更具体的 SKNode(例如 Obstacle),您可以尝试将其转换为您的自定义类类型。

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()
}

在下面的代码中,如果转换失败(这意味着返回的值不是Obstacle,则会在控制台上打印一条错误消息)。否则,如果值成功转换为 Obstacle,您可以调用添加到 Obstacle 的任何方法。

关于ios - 访问循环中添加的 Sprite 节点以调用类继承方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com