随机SKColor in Swift

时间:2015-08-27 15:54:38

标签: xcode swift

我想知道如何为红色,蓝色或绿色的节点选择随机SKColor?

目前,我只是按块设置节点颜色.fillColor = SKColor.redColor()

谢谢:)

2 个答案:

答案 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倍,这通常是非常理想的。