web-dev-qa-db-ja.com

In Swift SKSpriteNodeの色を変更するにはどうすればよいですか?

SKSpriteNodeが黒のゲームを作成しました。ユーザーが画面に触れると、SKSpriteNodeを白に変更したいと思います。私はできる限りグーグルで検索し、運が悪かったのでたくさんの異なる戦略を試みました。誰かがこれを行う方法を知っていますか?

これが私のシーンのコードです:

var blackBird = SKSpriteNode()

override func didMoveToView(view: SKView) {
    //Black Bird
    var blackBirdTexture = SKTexture(imageNamed:"blackbird")
    blackBirdTexture.filteringMode = SKTextureFilteringMode.Nearest

    blackBird = SKSpriteNode(texture: blackBirdTexture)
    blackBird.setScale(0.5)
    blackBird.position = CGPoint(x: self.frame.size.width * 0.35, y:
        self.frame.size.height * 0.6)

    blackBird.physicsBody =
        SKPhysicsBody(circleOfRadius:blackBird.size.height/2.0)
    blackBird.physicsBody!.dynamic = true
    blackBird.physicsBody!.allowsRotation = false

    self.addChild(blackBird)
}

override func touchesBegan(touches: Set<NSObject, withEvent event: UIEvent) {
    /* Called when a touch begins */

    for touch: AnyObject in touches {
    let location = touch.locationInNode(self)

    blackBird.color = .whiteColor()
    blackBird.colorBlendFactor = 1.0
}
13
Jacob Peterson

colorSKSpriteNodeプロパティは、次のように使用できます。

Sprite.color = .whiteColor()

SKSpriteNodeにテクスチャがある場合、色を表示するにはcolorBlendFactorをゼロ以外の値に設定する必要があることに注意してください。 SKSpriteNodeドキュメント からcolorBlendFactor

値は0.0から1.0までの数値でなければなりません。デフォルト値(0.0)は、colorプロパティが無視され、テクスチャの値を変更せずに使用する必要があることを示します。 0.0より大きい値の場合、テクスチャはシーンに描画される前に色とブレンドされます。


色の変化をアニメーション化する場合は、SKActionを使用できます。

let colorize = SKAction.colorizeWithColor(.whiteColor(), colorBlendFactor: 1, duration: 5)
Sprite.runAction(colorize)

SKActionドキュメント からcolorizeWithColor:colorBlendFactor:duration:

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

26
ABakerSmith

別のフォーラムで見つかった回答をコピーする:

画像の黒い部分はブレンドされません。画像のアルファが何であるかはわかりませんが、画像が真っ白な中央の黒いアウトラインである場合、ブレンドすると色が表示されます。 。アウトラインだけをブレンドしたい場合は、白いアウトラインを作成する必要があります。ブレンディングでは、色を黒にブレンドするように設定できますが、白にブレンドすることはできません。

リンク: https://www.reddit.com/r/Swift/comments/30hr88/colorizing_a_skspritenode_doesnt_seems_to_work_as/

10
Myoch