如何在 SKScene 中使用另一个变量初始化一个变量

How to initialize a variable using another variable in an SKScene

我希望能够使两个变量可用于整个 SKScene,以及其中的所有函数。其中一个变量使用另一个变量来创建其值。我明白为什么我不能这样做,但我不知道解决办法。我有这个代码:

class GameScene: SKScene {

    let num : CGFloat = 1.25
    let reciprocal = 1 / num          //   <— This Line

    override func sceneDidLoad() {

    }

    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered

    }

}

但我显然在第 4 行遇到错误。

Cannot use instance member 'num' within property initializer; property initializers run before 'self' is available

这意味着我无法使用该变量,因为它连接到skscene,而且场景还没有完全实现。有没有一种方法可以在不引发错误的情况下声明此变量并使其在 class?

中的任何地方都可评估

由于 reciprocal 直接依赖于 num,让先验成为基于后者

的计算 属性 可能是有意义的
class GameScene: SKScene {

    let num: CGFloat = 1.5
    var reciprocal: CGFloat { return 1/self.num }

    // ...

}

因为 num 是一个不可变的 属性 并且在运行时永远不会改变,另一种选择是让 reciprocal 成为一个 lazy 变量,在第一次使用时计算

class GameScene: SKScene {

    let num: CGFloat = 1.5
    lazy var reciprocal: CGFloat = { return 1/self.num }()

    // ...

}

(或者,为 GameScene 实现您自己的自定义初始化程序,您可以在其中将 numreciprocal 分别初始化为给定值及其倒数等)。