SKSpriteNode 不响应设置颜色和 blendModeFactor (SpriteKit & Swift)



我知道有很多关于这个的帖子,但是我的情况有点特殊,我还没有看到这个。

我的游戏中有一个球形精灵,每当我点击它时,我都想添加一个相同精灵的彩色版本,但具有渐入和渐出的效果。

给你一个示例代码:

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)

如果你想给你的精灵上色,那么你需要你的精灵是一个灰度图像,并且只有当你想让它们保持那种颜色时才使用颜色(在某种程度上,因为混合仍然适用于它们,你需要弄清楚你想要它如何混合的数学)

最新更新