不断地快速改变背景颜色

Posted

技术标签:

【中文标题】不断地快速改变背景颜色【英文标题】:Constantly changing the background color in swift 【发布时间】:2014-08-29 15:48:35 【问题描述】:

您好,我正在完成我的游戏,但我想添加一些细节,其中一个正在循环通过我尝试过 SKActions 的颜色循环,效果很好,但它与其他所有内容重叠。

然后我在更新函数中做了这个,但它什么也没做

if BGRed == 1 RedBoolIs1 = true
        else RedBoolIs1 = false

        if BGGreen == 1 GreenBoolIs1 = true
        else GreenBoolIs1 = false

        if BGBlue == 1 BlueBoolIs1 = true
        else BlueBoolIs1 = false


        //red only
        if RedBoolIs1 == true && GreenBoolIs1 == false && BlueBoolIs1 == false 
            BGGreen = BGGreen + 0.01 
        //red and green
        if RedBoolIs1 == true && GreenBoolIs1 == true && BlueBoolIs1 == false 
            BGRed = BGRed - 0.01  
        //green only
        if RedBoolIs1 == false && GreenBoolIs1 == true && BlueBoolIs1 == false 
            BGBlue = BGBlue + 0.01  
        //green and blue
        if RedBoolIs1 == false && GreenBoolIs1 == true && BlueBoolIs1 == true 
            BGGreen = BGGreen - 0.01  
        //blue only
        if RedBoolIs1 == false && GreenBoolIs1 == false && BlueBoolIs1 == true 
            BGRed = BGRed + 0.01  
        //blue and red
        if RedBoolIs1 == true && GreenBoolIs1 == false && BlueBoolIs1 == true 
            BGBlue = BGBlue - 0.01  

        self.backgroundColor = SKColor(red: CGFloat(BGRed), green: CGFloat(BGGreen), blue: CGFloat(BGBlue), alpha: 1)

还有可能使标签在所有颜色上都可读吗?我现在的解决方案是相互放置 2 个标签,第一个是白色的,45 大,上面的一个是黑色,40 大,但看起来并不总是很好

谢谢

【问题讨论】:

【参考方案1】:

首先我们像这样初始化颜色变量:

var BGRed: Float = 1
var BGGreen: Float = 0
var BGBlue: Float = 0

什么也没发生的原因是 0.1 加 10 次不等于 1.0。这是因为浮点数精度。我自己问过同类型的SO question。

要解决此问题,请删除如下比较:

if BGGreen == 1 

并替换为:

if round(BGGreen * 100) / 100.0 == 1.0

它将解决这个特殊问题,但更好的方法是开始使用decimal floating point

对于第二个问题,没有简单的答案,但在 SO 上有多个答案,例如 one。

【讨论】:

以上是关于不断地快速改变背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

尝试简单的 QPushButton 背景颜色更改 [重复]

如何动态改变JFrame的背景颜色?

Android从不同的活动改变背景颜色

如何在不刷新页面的情况下“连续”更改背景颜色[重复]

jQuery通过淡入淡出改变背景颜色并延迟返回原始颜色

在uitableviewcell背景颜色上快速更改标签