我在这行代码上不断收到 SIGBRT 错误:
let spriteTapped : SKSpriteNode = (nodeTapped as? SKSpriteNode)!
我用它来检查我的 Sprite 是否被点击,以及哪个 Sprite 被点击,每当点击 SKSpriteNode 以外的任何东西时,我都会收到此错误,关于如何解决此问题有什么想法吗?
最佳答案
如果 nodeTapped
不是 SKSpriteNode
,则条件转换
nodeTapped 为? SKSpriteNode
计算结果为 nil
,并且使用 !
强制展开会崩溃。
更好地使用可选绑定(bind):
if let spriteTapped = nodeTapped as? SKSpriteNode {
// ... do something with spriteTapped ...
} else {
// tapped node is not a SKSpriteNode
}
或
guard let spriteTapped = nodeTapped as? SKSpriteNode else {
return // tapped node is not a SKSpriteNode
}
// ... do something with spriteTapped ...
如果您有一个节点数组,那么
for case let spriteTapped as SKSpriteNode in nodesTapped {
// ... do something with spriteTapped ...
}
可用于迭代列表中的所有 Sprite 节点(以及 默默地忽略其他节点)。
关于ios - 转换为 sksprite 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51944521/