Merge 精灵套件:更改触点颜色 场景背景颜色为白色 在场景中有两个精灵节点(SKSpriteNode)精灵1和精灵2,具有黑色边框和透明背景 精灵2移动 精灵2到达精灵1并与之接触

Merge 精灵套件:更改触点颜色 场景背景颜色为白色 在场景中有两个精灵节点(SKSpriteNode)精灵1和精灵2,具有黑色边框和透明背景 精灵2移动 精灵2到达精灵1并与之接触,merge,sprite-kit,nodes,contact,points,Merge,Sprite Kit,Nodes,Contact,Points,我想做的是当两个精灵接触到彼此时,将它们合并。换句话说:我想将两个精灵的接触点的颜色更改为场景背景色。我尝试使用blendMode属性来实现这一点。但是,blendMode属性似乎只适用于节点及其父节点 blendMode属性是否仅适用于节点及其父节点?如果是,有没有办法更改两个“普通精灵节点”的接触点的颜色 谢谢你的建议 编辑: 背景颜色为白色 每个精灵都是透明的,有一个黑色的边框 当精灵接触或沿另一精灵的边框移动时,两个精灵边框的所有接触点的黑色变为白色(即背景色)。两个精灵的所有其他边界

我想做的是当两个精灵接触到彼此时,将它们合并。换句话说:我想将两个精灵的接触点的颜色更改为场景背景色。我尝试使用
blendMode
属性来实现这一点。但是,
blendMode
属性似乎只适用于节点及其父节点

blendMode
属性是否仅适用于节点及其父节点?如果是,有没有办法更改两个“普通精灵节点”的接触点的颜色

谢谢你的建议

编辑:

  • 背景颜色为白色
  • 每个精灵都是透明的,有一个黑色的边框
  • 当精灵接触沿另一精灵的边框移动时,两个精灵边框的所有接触点的黑色变为白色(即背景色)。两个精灵的所有其他边界点的颜色保持为黑色
  • 我又放了一张更详细的照片
提前谢谢


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

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

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

资料来源:

为了达到你想要的效果,我甚至不会搞混,而是把你的雪碧分成两个子雪碧,边框和内部颜色

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

将边界位置设置为0 将内部精灵zposition设置为10

当两个精灵合并在一起时,下面是如何渲染图形的

精灵1边框 精灵2边框 雪碧1里面 雪碧2里面

这将为您提供合并到一起的精灵所需的效果

当然,如果你的内部是透明的,而不是纯色,那么我们有一个 问题(现在你说你的背景是白色的,所以我们不需要横切,你的圆可以是白色的,但是如果你想在背景上添加纹理,那么我们有一个问题。)


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

@KnightOfDragon谢谢你的回答。我已经编辑了我的问题。通过您的更改,您仍然需要XOR混合,但当然,您需要小心,因为两个精灵需要在空背景上混合,然后您需要关闭XOR并添加背景。最好的方法是创建一个新的图形上下文,在其中使用XOR混合绘制精灵,然后在此基础上创建一个纹理,创建一个新的精灵,它既是合并的精灵,并将userinteractionEnabled设置为false Thank@KnightOfDragon覆盖在顶部。如果我理解正确的话,创建一个纹理并制作一个新的精灵,这两个精灵都是合并后的精灵,我最后只有一个精灵。对吗?但是我如何分别处理精灵(触摸、移动、位置等)?我需要分别移动、计算每个精灵。因此,我无法将精灵合并为一个精灵。我只需要合并两个边界的接触点,这样所有其他的东西就可以分开了。谢谢。不,你保留了旧的雪碧,你把新的放在上面,所以它看起来像是同一个雪碧,但实际上不是。然后,当精灵不再合并时,您将移除覆盖层。我已经反复考虑过这一点,会起作用的是,您的精灵包含两个精灵、一个边框和一个内部。将边框z位置设置为零,将精灵z位置设置为10(为了安全起见),当精灵绘制时,它将绘制边框和边框,然后绘制内部和内部,给您一个合并的外观,而无需任何繁重的数学运算