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

时间:2017-04-19 06:29:19

标签: swift sprite-kit sprite

嗨,伙计们!

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

IEventAggregator

所以实际的例子是:

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

提前感谢您的建议!

1 个答案:

答案 0 :(得分:1)

我认为这完全没问题。

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

我还认为您应该重命名一些成员名称以符合Swift 3 API指南,并使其目的更加清晰。例如populateIslands(atPosition:)并没有真正“填充”岛屿。它只创建一个单岛精灵并返回它。我建议你将其重命名为createIsland(at:)