1

我正在开发一款 IOS 游戏,但在使用 didBeginContact() 时遇到了一些问题。

我正在尝试从我的一个自定义类“FullBarClass”中获取 .difference 属性。这是一些代码:

func didBeginContact(contact: SKPhysicsContact) {
    var a: SKPhysicsBody
    var b: SKPhysicsBody

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask{
        a = contact.bodyA
        b = contact.bodyB
    } else {
        b = contact.bodyA
        a = contact.bodyB
    }

    let bar : FullBarClass = contact.bodyA.node
    let dif = Int(bar.difference)
    println(dif)
}

在“let bar : ...”行,我收到一个错误:“SKNode?不能转换为 'FullBarClass'”。

有谁知道为什么这不起作用?

4

1 回答 1

2

由于contact.bodyA.node是可选的并且可能不是 a FullBarClass,因此您不能简单地将主体节点对象分配给FullBarClass常量。bar如果它是适当的类型,您可以有条件地将对象分配给

if let bar = contact.bodyA.node as? FullBarClass {
   // This will only execute if body node is a FullBarClass
   let dif = Int(bar.difference)
   print(dif)
}
于 2015-07-21T22:44:27.963 回答