Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 得分时的随机颜色+;10_Ios_Swift - Fatal编程技术网

Ios 得分时的随机颜色+;10

Ios 得分时的随机颜色+;10,ios,swift,Ios,Swift,我的游戏中有几种颜色: class GameScene: SKScene { let colors = [SKColor.green, SKColor.red, SKColor.blue, SKColor.magenta, SKColor.yellow, SKColor.brown] 我想如果我在游戏中的东西每次得分+10时都会改变颜色(从上面的一个开始) 怎样才能让事情变得简单呢 score += 10 thing.fillColor = .random 试试这个颜色功能试试这个可能对你有

我的游戏中有几种颜色:

class GameScene: SKScene {
let colors = [SKColor.green, SKColor.red, SKColor.blue, SKColor.magenta, SKColor.yellow, SKColor.brown]
我想如果我在游戏中的东西每次得分+10时都会改变颜色(从上面的一个开始)

怎样才能让事情变得简单呢

score += 10
thing.fillColor = .random

试试这个颜色功能

试试这个可能对你有帮助

功能定义

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
}
var得分=2
var oldScore=分数
let colors=[SKColor.green,SKColor.red,SKColor.blue,SKColor.洋红,SKColor.yellow,SKColor.brown]
//循环的样本增加
对于0..<100中的i{
分数=分数+i
如果self.confirmColorChange(分数:分数,旧分数:旧分数){
设randomIndex=Int(arc4random_统一(UInt32(colors.count)))
让radomColor=colors[randomIndex]//在需要的地方设置颜色
}
oldScore=分数
}
调用方法,使用循环增量示例。 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
}
var得分=2
var oldScore=分数
let colors=[SKColor.green,SKColor.red,SKColor.blue,SKColor.洋红,SKColor.yellow,SKColor.brown]
//循环的样本增加
对于0..<100中的i{
分数=分数+i
如果self.confirmColorChange(分数:分数,旧分数:旧分数){
让radomColor=colors.randomElement()//在需要的地方设置颜色
}
oldScore=分数
}
我想如果我在游戏中的东西每次得分+10时都会改变颜色(从上面的一个开始)

当你不知道如何做某事时,试着把它分解成更小的问题。当分数更改时,您希望更改为随机颜色,这需要进行一些较小的操作:

  • 选择一种随机的颜色
  • 设置颜色
  • 当分数增加一些增量时,做一些事情
所以,让我们只看第一部分,并进一步细分。要从阵列中选择随机颜色,我们需要:

  • 计算数组中有多少种颜色
  • 在0和数组大小之间选择一个随机数
  • 获取与该数字对应的颜色
当你把它分解成非常小的步骤时,即使你必须在网上搜索一些答案,也不难弄清楚如何写出每一行。执行上述操作的代码可能如下所示:

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]
当你感到更舒服时,你可以将其中的一些步骤结合起来,这样你就不需要那么多中间变量,但是小步骤将有助于使问题变得小而容易理解

一旦你选择了一种随机的颜色,你需要弄清楚如何使用它来设置背景色。SpriteKit场景是
SKScene
,场景显示在
SKView
中。如果查看
SKScene
的文档,您会发现场景有一个对其显示视图的引用,并且视图(因为它是
UIView
的子类)有一个
backgroundColor
属性,您可以设置该属性。幸运的是,
backgroundColor
需要一个
UIColor
,而
SKColor
UIColor
的别名。那么,假设您有一个名为
游戏场景
的场景,并且您已经选择了如上所述的新颜色

let view = gameScene.view
view.backgroundColor = newColor
或者只是:

gameScene.view.backgroundColor = newColor
你说你想在分数增加10的时候改变颜色。首先要考虑的是,当分数增加一定数量时,如何做任何事情?分数是如何变化的?希望代码中只有一部分负责更新分数。如果是这样的话,那将是一个插入代码的好地方,这些代码会在分数发生变化时执行应该发生的事情。如果分数总是一次改变一个点,就像在棒球比赛中一样,那么你可以保持非常简单,当分数是10的倍数(或你选择的任何增量)时,只需改变背景颜色即可:

但是,如果分数一次可以增加一分以上,就像足球一样,那么这种简单的策略就行不通了,因为一次改变可能会跳过导致颜色改变的条件。一种处理方法是跟踪上次更改颜色时的分数:

if game.score - game.scoreAtLastColorChange >= 10 {
    game.changeColors()
    game.scoreAtLastColorChange = game.score
}

我希望这有帮助。继续把问题分解成更小的步骤。

填充颜色类型是什么?您遇到了什么问题?非常感谢您的教训!我以后一定会用的。
gameScene.view.backgroundColor = newColor
if game.score % 10 == 0 {
    game.changeColors()
}
if game.score - game.scoreAtLastColorChange >= 10 {
    game.changeColors()
    game.scoreAtLastColorChange = game.score
}