2017-01-16 107 views
1

在运行时我得到一个无例外错误,我无法解释自己为什么会出现问题。初始化SKSpriteNode对象时无例外

首先我声明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

如果让我们看看destinationSign是否已初始化,请使用。或者只是设置一个断点并检查有问题的精灵 – Whirlwind

回答

0

当addChild被调用时看起来像destinationSign是nil。你应该仔细检查用于初始化它的形象,大写字母,下划线,名称等等

尝试也:

if let node = destinationSign as SKSpriteNode { 
self.addChild(node) 
} 

防止无异常(但要记住的节点不会被添加)

你也应该考虑使用更广义的功能,可能在其它环境中使用,如:

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

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