Sprite-Kit:更改接触点颜色

时间:2016-02-23 13:15:00

标签: merge sprite-kit nodes contact points

  • 场景背景颜色为白色。
  • 在场景中有两个精灵节点(SKSpriteNode精灵1 精灵2 ,黑色边框和透明背景。
  • 精灵2 移动。
  • 精灵2 到达精灵1 并与之联系。

我尝试做的是合并两个精灵接触边界,当他们互相联系时。换句话说:我想将两个精灵的接触点颜色更改为场景背景颜色。我尝试使用blendMode属性执行此操作。但似乎blendMode属性仅适用于节点及其父节点。

blendMode属性是否仅适用于节点及其父节点?如果是,有没有办法改变两个"正常精灵节点的接触点的颜色"?

感谢任何想法。

修改

  • 背景颜色为白色。
  • 每个精灵都是透明的,并且边框为黑色。
  • 当精灵接触正在移动沿着另一个精灵的边框时,两个精灵边框的所有接触点的黑色变为白色(即背景)颜色)。两个精灵的所有其他边界点的颜色保持黑色。
  • 我把另一张图片放了更多细节。

提前致谢。

merge sprite borders

1 个答案:

答案 0 :(得分:1)

混合模式只会将纹理混合在一起,除非您应用Xor Blending之类的东西,否则它不会删除黑色边框。实际的精灵会混合到目标帧缓冲区,而不是父帧,因此渲染时精灵下面的任何东西都是。

  

将Sprite混合到Framebuffer中   渲染的最后阶段是将精灵的纹理混合到其目标帧缓冲区中。默认行为使用纹理的Alpha值将纹理与目标像素混合。但是,如果要向场景添加其他特殊效果,可以使用其他混合模式。

     

使用blendMode属性控制精灵的混合行为。例如,添加剂混合模式可用于将多个精灵组合在一起,例如用于火或照明。清单2-6显示了如何更改混合模式以使用添加剂混合。

来源:https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Sprites/Sprites.html

为了实现您所寻找的目标,我甚至不会混淆混合,而是将您的精灵分解为2个子精灵,边框和内部颜色。

我的意思是假设你有一个半径为10且厚度为1像素的圆圈。我们创建一个节点,该子节点只是半径为10的透明区域的边框,另一个半径为9的子节点将填充白色。

将边框zposition设置为0 将内部精灵zposition设置为10。

当2个精灵合并在一起时,以下是渲染的绘制方式

精灵1边框 精灵2边框 精灵1里面 精灵2里面的

这将为您提供将精灵合并在一起时所寻找的效果。

当然,如果你的内部有透明而不是纯色,那么我们就有了 问题。 (现在你说你的BG是白色的,所以我们不需要透明度,你的圆圈可能是白色的,但是如果你想在BG上放一个纹理,那么我们就有问题了。)

如果你确实想要保持你的圆圈“透明”,那么你需要做的是在绘制边框之前捕捉下面的背景,并使你的内圈的纹理