【问题标题】:Prevent user the label is changing - spriteKit防止用户标签改变 - spriteKit
【发布时间】:2014-07-27 23:27:43
【问题描述】:

我有一个标签,每 5 秒取一个不同的值(字符串值:“blue”、“pink”、“green”、“orange”)

我想警告用户标签将在 1 秒前更改。 例如,标签的背景颜色应该在标签取另一个值之前 1 秒为红色。

每5秒调用一次颜色变化函数的代码

let timerFunc: NSTimer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: Selector("colorChange"), userInfo: nil, repeats: true)

随机改变标签值的代码

 func colorChange() {
    let minRandomValue: UInt = 0
    let maxRandomValue: UInt = 4
    var numberRandom: UInt = UInt()

    numberRandom = UInt(arc4random()) % (maxRandomValue - minRandomValue)

    switch numberRandom {
    case 0: couleur.text = "Blue"; 
    case 1: couleur.text = "Green"; 
    case 2: couleur.text = "Orange"; 
    case 3: couleur.text = "Pink"; 
    default: println("value problem")
    }
}

稍后我将随机设置 5 秒定时器延迟。谢谢你。 Xcode 6.4、SDK 8.0

【问题讨论】:

  • 你有什么问题?
  • 此代码有效,我在询问如何在标签更改其值前 1 秒将标签背景设置为红色。我不知道如何开始编码
  • 设置另一个具有 4.0 秒延迟的计时器,或者如果它是随机的,则 randomValue - 1
  • 这个问题你解决了吗?
  • 是的,我用两个计时器解决了,麻烦重复错误。感谢帮助

标签: ios swift sprite-kit


【解决方案1】:

试试下面...

1) 创建一个 SKNode, 2)创建一个红色的矩形SKSpriteNode并将其添加到SKNode, 3)创建一个SKLabelNode并将其添加到SKNode, 4)对自己运行以下操作

let changeColorWaitChangeBackground = SKAction.sequence([
        SKAction.runBlock(self.changeColor),
        SKAction.waitForDuration(4, withRange:2),
        SKAction.runBlock(self.changeAlpha),
        SKAction.waitForDuration(1),
    ])

在changeColor()中,设置颜色字符串,设置红色SKSpriteNode的alpha为0.0。

在changeAlpha()中,设置红色SKSpriteNode的alpha为1.0。

【讨论】:

    【解决方案2】:

    将计时器间隔更改为 1.0,以便每秒调用一次 couleurChange 方法。在couleurChange 方法中,使用计数器跟踪时间。当计数器达到 4 时,更改标签的背景颜色。当计数器达到 5

    • 更改标签文本
    • 将 backgroundColor 恢复为正常值
    • 将计数器设置回 0

    【讨论】:

    • 为什么在没有实际工作的情况下调用函数 3 次?两个独立的计时器,一个 4 秒和一个 5 秒更清晰......
    • 没有完成工作意味着没有浪费处理器周期。有两个计时器,计时器必须是非重复的,这意味着不断地重新安排它们,而 imo 比只对计时器回调的几个额外调用更糟糕。
    • 谢谢你们,我会努力的。顺便说一句,是否有任何属性可以更改 SKLabelNode 的背景颜色?或者我需要创建另一个精灵?
    • @user3722523 我认为你需要在标签后面放一个 SKShapeNode 来给它一个背景。
    • 很公平@user3386109...不过,我几乎总是更喜欢可读性,而不是小的性能优化。但无论什么漂浮你的船。 user3722523,我们的两种解决方案都适合您。我的解决方案提供更精确的计时,以防您需要 1.32 秒的警告。
    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2019-02-06
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    相关资源
    最近更新 更多