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
}
color
のSKSpriteNode
プロパティは、次のように使用できます。
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プロパティが新しい値にアニメーション化されます。
別のフォーラムで見つかった回答をコピーする:
画像の黒い部分はブレンドされません。画像のアルファが何であるかはわかりませんが、画像が真っ白な中央の黒いアウトラインである場合、ブレンドすると色が表示されます。 。アウトラインだけをブレンドしたい場合は、白いアウトラインを作成する必要があります。ブレンディングでは、色を黒にブレンドするように設定できますが、白にブレンドすることはできません。
リンク: https://www.reddit.com/r/Swift/comments/30hr88/colorizing_a_skspritenode_doesnt_seems_to_work_as/