SKSpriteNode没有响应设置颜色& blendModeFactor(SpriteKit& Swift)

时间:2016-09-04 02:18:00

标签: ios swift sprite-kit skspritenode

我知道还有其他几个帖子,但我的情况有点具体,我还没看过这个。

我在游戏中有一个球形精灵,每当我点击它时,我想添加一个相同精灵的着色版本,但效果为fadeIn和fadeOut。

给你一个示例代码:

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 sprite着色(如果我将alpha设置为1),但是原始精灵的颜色相同。这是为什么?

在touchesBegan,我做了这样的事情:

func showTapEffect() {
  let fadeIn = SKAction.fadeInWithDuration(0.3)
  let fadeOut = SKAction.fadeOutWithDuration(0.3)
  let sequence = SKAction.sequence([fadeIn,fadeOut])

  self.touchEffect.runAction(sequence)
}

我也在同一个游戏中的不同场景中使用它,并且它有效。不知道为什么这个独特的案例没有。任何提示?如果您需要更多示例代码,请告诉我,这不是我当前代码的复制粘贴,我只是从内存中输入它,因此您可能会在其中看到拼写错误。但代码非常相似。

(我的精灵不是黑暗或黑色)

提前致谢。

1 个答案:

答案 0 :(得分:0)

我发布这个答案是因为它太大而无法发表评论,如果需要,我可以在这里发布代码。

我只是重读你的东西3次,你正在与白色混合,你期望得到什么颜色?如果你混合蓝色和白色,你得到蓝色,如果你混合紫色和蓝色,你会得到蓝色。如果你混合蓝色和灰色,你会得到一个更深的蓝色。这是所有百分比乘法。我不相信你会得到混合模式来挑选颜色。工作原理是它需要每个像素的颜色,并在像素上将其分解为RGB,然后它会采用您的颜色,然后将其分解为RGB(我们称之为CR CG CB)。数学在每个像素级别上变为(R * CRG * CGB * CB)。

你正在做(R * 1G * 1B * 1),这是({{1} },RG

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