初始化SKSpriteNode对象时没有异常

时间:2017-01-16 07:40:56

标签: sprite-kit swift3

我在运行时遇到了一个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)

有没有人对此行为有解释?

提前致谢

1 个答案:

答案 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)
    }
}

但是这些解决方案仅仅是理论上的,因为如果你的精灵没有添加到场景中,你实际上想要一个错误。