3

私はSKLabelNodeを使用しています。私はそれを作成して子としてシーンに追加し、問題なく表示されますが、colorizeWithColor() メソッドで色 (fontColor ではない) を変更しようとすると、ラベルがフェードアウトします。

問題のある行は次のとおりです。

myLabel.runAction(SKAction.colorizeWithColor(SKColor.blueColor(), colorBlendFactor: 1.0, duration: duration))

このアクションの完了後に myLabel.color プロパティをコンソールに出力したところ、次のようになりました。

Optional(UIDeviceRGBColorSpace 0.99178 0.99178 1 0.00822043)

ご覧のとおり、アルファ値はほぼ 0 であるため、ラベルが消えているのはこのためだと思いますが、なぜこれが起こっているのかわかりません。

前もって感謝します。

更新:わかりましたので、実際にこれを見つけました。質問する前に検索しなかったのは私の悪いことです。colorizeWithColor メソッドに関するドキュメントは次のとおりです。

このアクションは、SKSpriteNode オブジェクトによってのみ実行できます。アクションが実行されると、スプライトの color プロパティと colorBlendFactor プロパティが新しい値にアニメーション化されます。

だから、常に更新されている SKLabelNode を色付けするための良い回避策を誰かが知っているでしょうか?

!!!最後の更新!!!

私は解決策を見つけることができましたが、0x141E はさらに優れた解決策を思いつきました。それを使用して、色 A から色 B に移行する必要があるときにうまく機能する次の方法を作成しました。 fontColor に戻ると、色を変更すると点滅します。私の場合、それは color プロパティではなく fontColor を変更します。

本当に素晴らしいアプローチをしてくれた0x141Eに再び感謝します!!!

これが私の解決策です:

この特定のケースは、パラメーター withDuration = 0.5 のメソッドを呼び出すときにうまく機能します。ただし、他の時間が必要な場合は、送信された withDuration パラメーターまたは乗数をいじることができます。私のコードでは 5 です。解決策なので、見つけたら共有してください。私のニーズでは、これは素晴らしい作品です。

まず最初に、動画でその仕組みを確認してください: https://www.youtube.com/watch?v=ZIz8Bn0-hUA&feature=youtu.be

  func changeColorForLabelNode(labelNode: SKLabelNode, toColor: SKColor, withDuration: NSTimeInterval) {
    labelNode.runAction(SKAction.customActionWithDuration(withDuration, actionBlock: {
      node, elapsedTime in

      let label = node as SKLabelNode

      let toColorComponents = CGColorGetComponents(toColor.CGColor)
      let fromColorComponents = CGColorGetComponents(label.fontColor.CGColor)

      let finalRed = fromColorComponents[0] + (toColorComponents[0] - fromColorComponents[0])*CGFloat(elapsedTime / (CGFloat(withDuration)*5))
      let finalGreen = fromColorComponents[1] + (toColorComponents[1] - fromColorComponents[1])*CGFloat(elapsedTime / (CGFloat(withDuration)*5))
      let finalBlue = fromColorComponents[2] + (toColorComponents[2] - fromColorComponents[2])*CGFloat(elapsedTime / (CGFloat(withDuration)*5))
      let finalAlpha = fromColorComponents[3] + (toColorComponents[3] - fromColorComponents[3])*CGFloat(elapsedTime / (CGFloat(withDuration)*5))

      labelNode.fontColor = SKColor(red: finalRed, green: finalGreen, blue: finalBlue, alpha: finalAlpha)
    }))
  }
4

1 に答える 1

8

カスタム アクションを作成することSKLabelNodeで、 を で色付けできます。SKActionこれを行う方法の例を次に示します

myLabel.color = SKColor.blueColor()
myLabel.colorBlendFactor = 0.0

let duration:NSTimeInterval = 2.0
myLabel.runAction(SKAction.customActionWithDuration(duration, actionBlock: {
    node, elapsedTime in

    let label = node as SKLabelNode
    label.colorBlendFactor = elapsedTime / CGFloat(duration);
}))
于 2014-11-18T22:52:37.317 に答える