[英]In swift how do I change the color of a 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
}
您可以在SKSpriteNode
上使用color
屬性,例如:
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)
從colorizeWithColor:colorBlendFactor:duration:
上的SKAction
文檔 colorizeWithColor:colorBlendFactor:duration:
此操作只能由SKSpriteNode對象執行。 當動作執行時,精靈的color和colorBlendFactor屬性將動畫為其新值。
復制在另一個論壇上找到的答案:
你的圖像的黑色部分不會混合,我無法看到你的圖像中的alpha是什么,但如果你的圖像只是一個帶有純白色中心的黑色輪廓,如果你混合,你會看到顏色。 如果只想要混合輪廓,則需要創建白色輪廓。 使用混合,您可以將顏色設置為混合為黑色,但不能混合為白色。
鏈接: https : //www.reddit.com/r/swift/comments/30hr88/colorizing_a_skspritenode_doesnt_seems_to_work_as/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.