我在运行时遇到了一个nil异常错误,我无法解释自己为什么会出现问题。
首先我声明一个像这样的SKSpriteNode对象
var destinationSign: SKSpriteNode?
后来我定义了一个像这样创建这个SpriteNode的函数
func showDestination( x: CGFloat, y: CGFloat){
destinationSign = SKSpriteNode(fileNamed: "sign_1")
destinationSign?.position.x = x
destinationSign?.position.y = y
addChild(destinationSign!)
}
之后我有一个不同的功能并触发这个showDestination函数
showDestination(x: 20 , y: 40)
有没有人对此行为有解释?
提前致谢
答案 0 :(得分:0)
调用addChild时,destinationSign看起来是nil。你应该仔细检查用于初始化的图像的名称,大写字母,下划线等......
另请尝试:
if let node = destinationSign as SKSpriteNode {
self.addChild(node)
}
防止nil异常(但记住不会添加节点)
您还应该考虑使用更通用的函数,可以在其他上下文中使用,如:
func show (_ node: SKSpriteNode, at point: CGPoint) {
node = SKSpriteNode(fileNamed: "sign_1")
if let node = node as SKSpriteNode {
node.position.x = point.x
node.position.y = point.y
addChild(node)
}
}
但是这些解决方案仅仅是理论上的,因为如果你的精灵没有添加到场景中,你实际上想要一个错误。