gpt4 book ai didi

swift - 在 removefromParent 之后从场景中移除时让 Sprite 发出消息?

转载 作者:搜寻专家 更新时间:2023-10-30 23:09:22 25 4
gpt4 key购买 nike

在 Swift 中有什么方法可以告诉我什么时候 SKSpriteNode 实际上已经从场景中移除了吗?我不认为它实际上是在调用 removeFromParent 时完成的,但我认为它是稍后完成的,当 Sprite-Kit 认为这样做很方便时。

我试图了解完整的生命周期,我注意到即使在该 Sprite 已被删除之后, Sprite 仍然可以参与 didBeginContact 中的接触和碰撞。

如果我打印出 children 的内容(即包含场景中所有子项的数组),我会看到 Sprite 在 removeFromParent 调用后立即被删除,但 Sprite 仍然可用(至少,对于这次 SK 游戏循环的执行)。

编辑:这个问题来 self 之前关于 didBeginContact 被一个联系人多次调用 (Sprite-Kit registering multiple collisions for single contact) 的问题,并且发现在第一次联系期间移除 sprite 并不能阻止后续联系人。 (因为 SK 已经提前“排队”联系了。)所以我想知道 Sprite 何时真正被删除。

最佳答案

我错过了显而易见的东西吗?所以即使在 removeFromParent 之后, Sprite 仍然存在。然而,这很可能是因为我已经将节点分配给一个临时的 SKSpriteNode 变量,那么只要该变量在附近,就会对该节点有强引用,因此它不会被释放.此外,SKPhysicsContact 对象本身将保留对 physicsBody 的引用,它具有对节点的引用,我认为这也会阻止分配。

更新

要查看 Sprite 何时实际释放,请使用 deinit() 方法:

deinit {
print("Invader of type \(type) deinitialised")
}

我认为这只能添加到子类定义中,不能通过扩展。

拥有一个对被移除节点具有强引用的变量将阻止节点被取消分配,直到该变量本身被移除或更改为引用其他内容。

关于swift - 在 removefromParent 之后从场景中移除时让 Sprite 发出消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40717493/

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