【问题标题】:SKSpriteNode only charge part of the texture colorSKSpriteNode 只收取部分纹理颜色
【发布时间】:2017-01-17 00:32:40
【问题描述】:

是否可以将颜色应用于 SKSpriteNode 纹理但只能与它的某种颜色混合?

例如说我有一个立方体(不是 3d,而是一个看起来像立方体的 2d 纹理),我有顶部的白色、左下角的蓝色和右下角的红色。我可以应用颜色和颜色混合因子来仅更改我选择的颜色吗?例如白色、红色或蓝色。

请注意,为了简单起见,我在此示例中仅使用了立方体。在真实的类似场景中,节点不会像立方体面那样容易被“切碎”,以解决问题。纹理的一部分可以保持透明或始终为白色,但其上总会有至少一种不应该改变的其他颜色(将其视为部分背景、部分游戏对象的纹理)

【问题讨论】:

  • 不,你不能针对特定的颜色,你必须使用着色器来实现你的效果,或者使用覆盖 skspritenode 来保持你的纯色
  • 非常有用的信息,非常感谢
  • @Knight0fDragon 您想将您的评论扩展到解决问题的答案

标签: sprite-kit skspritenode


【解决方案1】:

要做你想做的事,你有两个选择:

1) 学习如何使用SKShader:很遗憾,我无法为您提供帮助,因为我有一个人为我处理这些东西,所以我不需要广泛学习着色器。基本上,您所做的是在 GPU 级别,针对您希望允许更改的某些像素。

2) 对于新手来说更简单的方法是使用 2 个 SKSpriteNode。你用你想要的所有纯色创建你的第一个精灵,然后为你想要改变的所有像素创建一个灰度叠加图像。然后你可以应用colorBlendFactor来达到你想要的效果。

基本上:

let sprite = SKSpriteNode(imageNamed:"fullcolor")
let overlay = SKSpriteNode(imageNamed:"overlay")
overlay.color = .Red
overlay.zPosition = 1
overlay.colorBlendFactor = 1.0
sprite.addChild(overlay)

【讨论】:

  • 居然走着色器路线!
  • 非常好,着色器是要走的路,我会发布着色器代码供人们将来使用它,您可以编辑我的答案或添加一个新的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多