我的游戏中颜色很少:
class GameScene: SKScene {
let colors = [SKColor.green, SKColor.red, SKColor.blue, SKColor.magenta, SKColor.yellow, SKColor.brown]
我想让我的游戏中的事物每次得分+10时都改变颜色(从上述之一)。
如何使其变得简单?
score += 10
thing.fillColor = .random
答案 0 :(得分:2)
我想让我的游戏中的事物每次得分+10时都改变颜色(从上述之一)。
当您不知道该怎么做时,请尝试将其分解为较小的问题。您想在分数变化时更改为随机颜色,这需要做一些较小的事情:
因此,让我们仅介绍第一部分并将其进一步分解。要从您的阵列中选择随机颜色,我们需要:
当您将其分解成非常小的步骤时,即使必须在线搜索一些答案,也不难弄清楚如何编写每一行。完成上述操作的代码如下:
let colors = [SKColor.green, SKColor.red, SKColor.blue, SKColor.magenta, SKColor.yellow, SKColor.brown]
let numberOfColors = colors.count
let colorIndex = Int.random(in:0 ..< numberOfColors)
let newColor = colors[colorIndex]
如果您使用的是较早版本的Swift,则需要使用其他函数来选择随机数,这需要进行一些强制转换,但这仍然非常简单:
let colors = [SKColor.green, SKColor.red, SKColor.blue, SKColor.magenta, SKColor.yellow, SKColor.brown]
let numberOfColors = colors.count
let colorIndex = Int(arc4random_uniform(UInt32(numberOfColors)))
let newColor = colors[colorIndex]
您可以结合使用其中的一些步骤,以使您不需要那么多的中间变量,但是较小的步骤将有助于使问题保持较小且易于理解。
一旦您选择了一种随机颜色,就需要弄清楚如何使用它来设置背景颜色。 SpriteKit场景是SKScene
,并且场景显示在SKView
中。如果查看SKScene
的文档,您会发现该场景对显示该视图的引用,而该视图(因为它是UIView
的子类)具有一个{{ 1}}可以设置的属性。幸运的是,backgroundColor
想要一个backgroundColor
,而UIColor
是SKColor
的别名。因此,假设您有一个名为UIColor
的场景,并且已经选择了上面的新颜色...
gameScene
或者只是:
let view = gameScene.view
view.backgroundColor = newColor
您说您希望分数增加10时发生这种颜色变化。首先要考虑的是分数增加一定量时该怎么做?分数如何变化?希望您的代码中只有一部分负责更新得分。如果是这样,那将是插入执行分数更改时应该发生的事情的代码的好地方。如果像棒球一样每次得分总是一次改变一个点,那么您可以保持它非常简单,并且当得分是10的倍数(或您选择的任意增量)时,只需更改背景颜色即可:
gameScene.view.backgroundColor = newColor
但是,如果一次得分可以增加一个以上的分数(如在足球比赛中那样),那么该简单的策略将行不通,因为单个更改可能会跳过使颜色发生更改的条件。处理该问题的一种方法是跟踪上次更改颜色的分数:
if game.score % 10 == 0 {
game.changeColors()
}
我希望能有所帮助。只需将问题分解为更小的步骤即可。
答案 1 :(得分:0)
public func randomColorWithOpacity(opacity: CGFloat) -> UIColor {
let r: UInt32 = arc4random_uniform(255)
let g: UInt32 = arc4random_uniform(255)
let b: UInt32 = arc4random_uniform(255)
return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: opacity)
}
thing.fillColor = randomColorWithOpacity(opacity: 1.0)
对颜色尝试此功能
答案 2 :(得分:0)
尝试此一项可能会对您有所帮助。
功能定义
func confirmColorChange(score:Int,oldScore:Int)->Bool{
if (score - oldScore) % 10 == 0{
return true
}
return false
}
调用方法,其中包含用于循环增量的示例。 Swift 4.1及更低版本
var score = 2
var oldScore = score
let colors = [SKColor.green, SKColor.red, SKColor.blue, SKColor.magenta, SKColor.yellow, SKColor.brown]
//Sample Increased for Loop
for i in 0 ..< 100 {
score = score + i
if self.confirmColorChange(score: score, oldScore: oldScore){
let randomIndex = Int(arc4random_uniform(UInt32(colors.count)))
let radomColor = colors[randomIndex] //Set a color where you want
}
oldScore = score
}
调用方法,其中包含用于循环增量的示例。 Swift 4.2及更高版本
var score = 2
var oldScore = score
let colors = [SKColor.green, SKColor.red, SKColor.blue, SKColor.magenta, SKColor.yellow, SKColor.brown]
//Sample Increased for Loop
for i in 0 ..< 100 {
score = score + i
if self.confirmColorChange(score: score, oldScore: oldScore){
let radomColor = colors.randomElement() //Set a color where you want
}
oldScore = score
}