嗨,伙计们!
我正在用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
}
}
提前感谢您的建议!
答案 0 :(得分:1)
我认为这完全没问题。
静态成员在与类型实例无关时使用,但与类型本身无关。由于您的方法只是创建并返回SKSpriteNode
,因此它不需要任何状态,因此可以独立于Island
类型的实例。
我还认为您应该重命名一些成员名称以符合Swift 3 API指南,并使其目的更加清晰。例如populateIslands(atPosition:)
并没有真正“填充”岛屿。它只创建一个单岛精灵并返回它。我建议你将其重命名为createIsland(at:)
。