Мне было интересно, как я смогу выбрать случайный SKColor для узла из красного, синего или зеленого цветов?Случайный SKColor in Swift
На данный момент, я просто установив цвет узла на block.fillColor = SKColor.redColor()
Спасибо :)
Мне было интересно, как я смогу выбрать случайный SKColor для узла из красного, синего или зеленого цветов?Случайный SKColor in Swift
На данный момент, я просто установив цвет узла на block.fillColor = SKColor.redColor()
Спасибо :)
Вы можете использовать создать с красный/зеленый/синий:
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)
Вот решение для 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 раз того же цвета в строке, что обычно не очень желательно.
Спасибо Kametrixom. Мне нравится код. Очень хорошо. Как ограничить его только выделенным цветом? как красный, розовый, синий, зеленый и т. д. – Questions
@Questions Я отредактировал мой ответ, проверьте его – Kametrixom
Спасибо 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
Спасибо Том! Я использую код, который вы мне дали, однако есть некоторые незначительные ошибки, которые я пытаюсь исправить. block.fillColor = SKColor (красный: arc4random_uniform (255) /255.0,green: arc4random_uniform (255) /255.0, синий: arc4random_uniform (255) /255.0, альфа: 1,0) «бинарный оператор не может быть применен к UInt32 и Double " – Questions
ОК, просто нужно преобразовать в Float, см. Мои правки – tomsoft