如何在SpriteKit中解散节点?

时间:2015-06-16 05:23:12

标签: ios sprite-kit

我有2个SKSpriteNode对象,我想交叉淡化它们。 最简单的方法之一是创建一个fadeOut SKAction和一个fadeIn SKAction,并将它们应用于SKSpriteNode对象。但是这种方法的问题在于,在动作期间,它们都具有1.0以下的alpha值,这看起来不太好。

例如,我想将红色正方形SKNode溶解到绿色圆形SKNode start end

如果只是淡出红色方块并在动作过程中淡出绿色圆形,它会看起来像这样 fade

所以你可以通过这两个对象看到背景。我希望像这样解散这两个对象: dissolve

在UIKit中我可以使用UIView.transitionWithView但是在SpriteKit中我只找到了一种类似的方法来呈现场景(SKViewObject.presentScene: transition:)。那么无论如何要为SKNodes进行解散过渡吗?

2 个答案:

答案 0 :(得分:0)

在调整两个节点上的Alpha设置时,您可以了解有关背景的信息。可能的黑客攻击可能是在背景前临时插入一个实体节点,但在其他节点后面直到操作完成。此时你将它删除。

节点应该是两个节点横截面的形状(请原谅我的草率艺术品):

enter image description here

答案 1 :(得分:0)

我搜索了很多这个问题,我几乎决定使用着色器来做这种溶解(因为你可以直接在着色器中编辑像素),但后来我发现有一种不寻常的方法来解决这个问题。它可能对每种情况都没有用,但如果你的背景不做滚动或缩放等操作,这种方法可能是最简单的方法。简单来说,只需为当前屏幕创建一个屏幕截图并将其显示在顶部,然后将您的节点更改为您需要的精灵,最后淡出您拍摄的屏幕截图。

首先,您必须确保所有节点都在正确的节点树中。然后使用SKViewObject.textureFromNode(rootNode)创建屏幕截图,从此纹理创建一个精灵节点,并将其添加到您的屏幕。然后,您可以创建淡出SKAction以淡出此屏幕截图精灵。您可以在操作结束时将其删除。

使用这种方法,在淡出过程中,屏幕将如下所示: enter image description here