我想知道如何为红色,蓝色或绿色的节点选择随机SKColor?
目前,我只是按块设置节点颜色.fillColor = SKColor.redColor()
谢谢:)
答案 0 :(得分:1)
您可以使用带红色/绿色/蓝色的创建:
SKColor(red: Float(arc4random_uniform(255))/255.0,
green: Float(arc4random_uniform(255))/255.0 ,
blue: Float(arc4random_uniform(255))/255.0 ,
alpha: 1.0)
这将生成随机颜色。你可以在HSV空间中使用相同的原理....
另一个版本,如果你创建一个randomTo1()函数,它返回一个从0到1的CGFloat随机数:
func randomTo1() -> CGFloat{
return CGFloat(arc4random_uniform(255))/255.0
}
let color=SKColor(red: randomTo1(),green: randomTo1(), blue: randomTo1(), alpha:1.0)
答案 1 :(得分:1)
以下是RGB和HSB的解决方案:
func random() -> CGFloat {
return CGFloat(arc4random()) / CGFloat(UInt32.max)
}
func trulyRandomColor() -> SKColor {
return SKColor(red: random(), green: random(), blue: random(), alpha: 1.0)
}
func niceRandomColor() -> SKColor {
return SKColor(hue: random(), saturation: 1.0, brightness: 1.0, alpha: 1.0)
}
编辑:如果您只需要某些颜色并希望在它们之间随机选择,那么这样的工作就可以了:
import GameKit
struct ColorGenerator {
private let distribution : GKRandomDistribution
private let possibleColors = [
SKColor.redColor(),
SKColor.blueColor(),
SKColor.greenColor(),
SKColor.purpleColor(),
SKColor.yellowColor(),
SKColor.brownColor(),
SKColor.whiteColor()
]
init() {
distribution = GKShuffledDistribution(lowestValue: 0, highestValue: possibleColors.count - 1)
}
func random() -> SKColor {
return possibleColors[distribution.nextInt()]
}
}
let generator = ColorGenerator()
for _ in 1...100 {
generator.random()
}
我在这里使用了GKShuffledDistribution
来避免重复颜色并让它看起来更像"随机" (即使它没有)。您也可以将其替换为GKRandomDistribution
,但之后您可能连续使用相同颜色的5倍,这通常是非常理想的。