使用静态方法和属性创建 SKSpriteNode

SKSpriteNode creation with static methods and properties

大家好!

我正在使用 SpriteKit 框架编写游戏,我尝试使用多种配置创建对象,因此我必须使用静态来避免 init 方法和一些带有解码器的样板代码。所以我写了代码,但我真的不知道这段代码是否可以用于创建目的,但这段代码实际上工作正常。

class Island: SKSpriteNode {

    static func populateIsland(at point: CGPoint) -> SKSpriteNode {
        let islandImageName = configureIslandName()
        let island = SKSpriteNode(imageNamed: islandImageName)
        island.setScale(randomScaleFactor)
        island.position = point

        return island
    }

    fileprivate static func configureIslandName() -> String {
        let distribution = GKRandomDistribution(lowestValue: 1, highestValue: 4)
        let randomNumber = distribution.nextInt()
        let imageName = "pic" + "\(randomNumber)"
        return imageName
    }

    fileprivate static var randomScaleFactor: CGFloat {
        let distribution = GKRandomDistribution(lowestValue: 7, highestValue: 10)
        let randomNumber: CGFloat = CGFloat(distribution.nextInt()) / 10

        return randomNumber
    }
}

所以实际例子是:

let island = Island.populateIsland(at: CGPoint(x: 100, y: 100))

提前感谢您的建议!

我觉得这完全没问题。

静态成员与类型的实例无关,而是与类型本身相关时使用。由于您的方法只是创建 return 一个 SKSpriteNode,它不需要任何状态,因此可以独立于 Island 类型的实例。

我还认为您应该重命名您的一些成员名称以符合 Swift 3 API 指南并使它们的目的更明确。例如populateIslands(atPosition:) 并不是真正的 "populate" 岛屿。它只是创建 一个 单岛精灵并 returns 它。我建议您将其重命名为 createIsland(at:).