使用静态方法和属性创建 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:)
.
大家好!
我正在使用 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:)
.