2015-08-27 5 views
-1

Мне было интересно, как я смогу выбрать случайный SKColor для узла из красного, синего или зеленого цветов?Случайный SKColor in Swift

На данный момент, я просто установив цвет узла на block.fillColor = SKColor.redColor()

Спасибо :)

ответ

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() FUNC, которая возвращает случайное число CGFloat от 0 до 1:

func randomTo1() -> CGFloat{ 
    return CGFloat(arc4random_uniform(255))/255.0 
} 
let color=SKColor(red: randomTo1(),green: randomTo1(), blue: randomTo1(), alpha:1.0) 
+0

Спасибо Том! Я использую код, который вы мне дали, однако есть некоторые незначительные ошибки, которые я пытаюсь исправить. block.fillColor = SKColor (красный: arc4random_uniform (255) /255.0,green: arc4random_uniform (255) /255.0, синий: arc4random_uniform (255) /255.0, альфа: 1,0) «бинарный оператор не может быть применен к UInt32 и Double " – Questions

+0

ОК, просто нужно преобразовать в Float, см. Мои правки – tomsoft

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

EDIT: Что-то, как это работает, если вам нужно только определенные цвета и хотите выбрать случайным образом между ними:

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 раз того же цвета в строке, что обычно не очень желательно.

+0

Спасибо Kametrixom. Мне нравится код. Очень хорошо. Как ограничить его только выделенным цветом? как красный, розовый, синий, зеленый и т. д. – Questions

+0

@Questions Я отредактировал мой ответ, проверьте его – Kametrixom

+0

Спасибо Kametrixom. Еще один вопрос, код, который вы мне дали раньше: функ случайному() -> CGFloat { возвращение CGFloat (arc4random())/CGFloat (UInt32.max) } функ trulyRandomColor() -> SKColor { вернуться SKColor (red: random(), green: random(), blue: random(), alpha: 1.0) } func niceRandomColor() -> SKColor { return SKColor (hue: random(), saturation: 1.0, яркость: 1.0, alpha: 1.0) } Есть ли способ присвоить значение каждому случайному цвету, который появляется? – Questions

Смежные вопросы