我知道有很多关于这个的帖子,但是我的情况有点特殊,我还没有看到这个。
我的游戏中有一个球形精灵,每当我点击它时,我都想添加一个相同精灵的彩色版本,但具有渐入和渐出的效果。
给你一个示例代码:
self.ball = SKSpriteNode(imageNamed: "ball")
self.ball.position = CGPoint(x: midX, y: midY)
self.ball.zPosition = 1
self.ball.size = CGSize(width: 100, height: 100)
self.touchEffect = SKSpriteNode(imageNamed: "ball")
self.touchEffect.position = CGPoint(x: 0, y: 0)
self.touchEffect.zPosition = 2
self.touchEffect.size = CGSize(width: 100, height: 100)
self.touchEffect.color = UIColor.whiteColor()
self.touchEffect.blendColorFactor = 1
self.touchEffect.alpha = 0
self.ball.addChild(self.touchEffect)
self.addChild(self.ball)
现在,到目前为止……我甚至看不到touchEffect精灵的颜色(如果我将alpha设置为1),但它与原始精灵的颜色相同。为什么会这样?
在touches开始时,我做了这样的事情:
func showTapEffect() {
let fadeIn = SKAction.fadeInWithDuration(0.3)
let fadeOut = SKAction.fadeOutWithDuration(0.3)
let sequence = SKAction.sequence([fadeIn,fadeOut])
self.touchEffect.runAction(sequence)
}
我也在同一款游戏的不同场景中使用了它,并且它确实有效。不知道为什么这个独特的案例没有。有提示吗?如果你需要更多的示例代码,让我知道,不是复制粘贴我当前的代码,我只是从我的记忆中键入它,所以你可能会看到一个错字错误在那里。但是代码是非常相似的。
(我的精灵不是深色或黑色)
我张贴这是一个答案,因为它太大的评论,我可以在这里张贴代码,如果需要的话。
我刚刚把你的东西读了三遍,你在和白色混合,你希望得到什么颜色?如果你把蓝色和白色混合,你会得到蓝色,如果你把紫色和蓝色混合,你会得到蓝色。如果你把蓝色和灰色混合,你会得到更深的蓝色。都是百分比乘法。我不相信你有一个混合模式来选择颜色。它的工作原理是,它取每个像素的颜色,在像素上,将其分解为R
, G
, B
,然后取你的颜色,并将其分解为rgb(我们称之为CR
CG
CB
)。在每像素级别上,数学变成(R
* CR
, G
* CG
, B
* CB
)。
您正在做(R
* 1
, G
* 1
, B
* 1
),即(R
, G
, B
)
如果你想给你的精灵上色,那么你需要你的精灵是一个灰度图像,并且只有当你想让它们保持那种颜色时才使用颜色(在某种程度上,因为混合仍然适用于它们,你需要弄清楚你想要它如何混合的数学)