簡體   English   中英

在swift中如何更改SKSpriteNode的顏色?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM