着色器不在我的精灵之上

Shader not laying on top of my sprite

我试图了解如何在 SpriteKit 中应用着色器,因此我制作了以下着色器,该着色器来自指南并进行了一些改编 (http://battleofbrothers.com/sirryan/understanding-shaders-in-spritekit):

void main() {
    vec4 val = texture2D(u_texture, v_tex_coord);

    if (val.a == 1.0) {
        gl_FragColor = vec4(1.0,1.0,1.0,1.0);
    } else {
        gl_FragColor = val;
    }
}

这个简单着色器的想法是将精灵节点的每个非透明像素转换为白色。

着色器与我的 sprite 节点一起工作,这些节点具有单一纹理作为它们的图像。

我遇到的问题是,当我将着色器应用于来自多层 SKScene 的精灵节点时,着色器似乎被忽略了。我已经尝试将着色器设置到场景的每个子节点,但它仍然没有出现。

有什么建议吗?

我找到了解决问题的方法。

我最初尝试将着色器应用于精灵的每个子节点,如下所示:

for child in children {
    (child as! SKSpriteNode).shader = myShader
}

代码没有成功。

现在我使用以下工作代码,它遵循我的子节点的层次结构:

(self.childNode(withName: "body") as! SKSpriteNode).shader = myShader
(self.childNode(withName: "body")!.childNode(withName: "arm") as! SKSpriteNode).shader = myShader
// ...