我创建了一个黑色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
}
答案 0 :(得分:23)
您可以使用color
上的SKSpriteNode
属性,例如:
sprite.color = .whiteColor()
请记住,如果您的SKSpriteNode
有纹理,则需要将colorBlendFactor
设置为非零值才能看到您的颜色。来自colorBlendFactor
上的SKSpriteNode
documentation:
该值必须是介于0.0和1.0之间的数字。默认 value(0.0)表示忽略color属性 纹理的值应该未经修改地使用。 对于大于的值 0.0,在绘制到场景之前,纹理与颜色混合。
如果要为颜色更改设置动画,可以使用SKAction
:
let colorize = SKAction.colorizeWithColor(.whiteColor(), colorBlendFactor: 1, duration: 5)
sprite.runAction(colorize)
colorizeWithColor:colorBlendFactor:duration:
上的SKAction
documentation
此操作只能由SKSpriteNode对象执行。当。。。的时候 动作执行,精灵的颜色和colorBlendFactor属性 动画到他们的新价值。
答案 1 :(得分:9)
复制在另一个论坛上找到的答案:
图像的黑色部分不会被混合,我无法看到图像中的alpha是什么,但如果你的图像只是一个带有纯白色中心的黑色轮廓,如果你混合,你会看到颜色。如果只想要混合轮廓,则需要创建白色轮廓。 使用混合,您可以将颜色设置为混合为黑色,但不能混合为白色。
link:UILayoutGuide