【问题标题】:Swift : Background Color fading animation (SpriteKit)Swift:背景颜色渐变动画(SpriteKit)
【发布时间】:2015-08-25 18:49:54
【问题描述】:

我正在创建一个游戏,背景颜色是白色的,因此:

self.backgroundColor = SKColor.whiteColor()

所以当游戏开始时,白色是背景。我有一个评分系统,所以基本上我希望在达到某个分数时改变颜色:

if score < 100{
            enemy.runAction(SKAction.moveTo(mainBall.position, duration:3))  
        }
        else if score >= 100 && score < 200{
            enemy.runAction(SKAction.moveTo(mainBall.position, duration:2.5))
            self.backgroundColor = SKColor.purpleColor()
        }
        else if score >= 200 && score < 300{
            enemy.runAction(SKAction.moveTo(mainBall.position, duration:2))
            self.backgroundColor = SKColor.greenColor()
        }

但是,老实说,这种方法非常笨拙,而且看起来很糟糕。我的游戏中的一切都是流动的,并且在从场景中移除时包含淡入淡出:

livesLabel.runAction(SKAction.fadeInWithDuration(0.5))

但我不确定如何使用背景颜色进行此操作。如果我将上面的示例与 backgroundColor 一起使用,例如

self.backgroundColor = SKAction.fadeInWithDuration(SKColor.purpleColor())

我收到错误“无法使用 '(UIColor)' 类型的参数列表调用 'fadeInWithDuration'”

注意:我完全理解尝试将背景颜色分配给动画是愚蠢的。但我把代码放在那里试图解决我的问题

【问题讨论】:

    标签: ios swift background sprite-kit fade


    【解决方案1】:

    要从当前背景颜色平滑过渡到其他颜色,请使用colorizeWithColor SKAction。这是一个例子......

    runAction(SKAction.colorizeWithColor(SKColor.purpleColor(), colorBlendFactor: 1.0, duration: 2.0))
    

    【讨论】:

      【解决方案2】:

      将此代码放入您的 viewDidLoad 方法中,看看它是否是您要查找的内容

          self.view.backgroundColor = UIColor.blueColor()
          UIView.animateWithDuration(1.0, delay: 1.0, options: nil, animations: { () -> Void in
              self.view.backgroundColor = UIColor.greenColor()
          }, completion: nil)
      

      如果这是您正在寻找的内容,请执行类似

          if (score < 100){
              enemy.runAction(SKAction.moveTo(mainBall.position, duration:3))  
          }
          else if (score >= 100 && score < 200){
              enemy.runAction(SKAction.moveTo(mainBall.position, duration:2.5))
              UIView.animateWithDuration(0.5, animations: { () -> Void in
                 self.backgroundColor = SKColor.purpleColor()
             })
          }
          else if (score >= 200 && score < 300){
              enemy.runAction(SKAction.moveTo(mainBall.position, duration:2))
               UIView.animateWithDuration(0.5, animations: { () -> Void in
                 self.backgroundColor = SKColor.greenColor()
          })
          }`
      

      【讨论】:

      • 嗨科林,我正在寻找淡入。不是延迟。不过还是谢谢
      【解决方案3】:

      你必须将你的 if 语句添加到 override func update(currentTime: NSTimeInterval)(这个方法在每一帧都被调用)。

      另外,我建议你删除 if 语句之后的 (),因为它们是多余的,背景颜色之前的 self 也是如此。

      【讨论】:

      • 我的 if 语句在该函数内,也感谢您的指点,但您的评论对我的情况没有帮助
      • 我在一个示例项目中进行了尝试,它对我有用。您可以做的是用断点跟踪“分数”,看看问题是否出在其他地方。
      • 朱莉娅你不明白我的问题。评分系统绝对没问题。我正在尝试用动画改变背景,所以它基本上会淡入