着色器没有放在我的精灵之上

时间:2017-02-08 12:22:01

标签: swift sprite-kit fragment-shader

我正在尝试了解如何在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;
    }
}

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

着色器适用于我的精灵节点,这些节点具有单个纹理作为其图像。

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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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

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

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
// ...