【问题标题】:Shader not laying on top of my sprite着色器没有放在我的精灵之上
【发布时间】:2017-02-09 20:17:21
【问题描述】:

我正在尝试了解如何在 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 的精灵节点时,它似乎被忽略了。我尝试将着色器设置为场景的每个子节点,但仍然没有出现。

有什么建议吗?

【问题讨论】:

  • 对不起,我缺少一些理解。 “多层 SKScene”是什么意思?
  • 您好,感谢您的支持。我找到了解决问题的方法(我很快就会发布)。无论如何,我所说的“多层 SKScene”是指我创建了一个视觉场景编辑器文件 (.sks),并通过为不同的身体部位添加不同的节点来在这个场景中构建我的精灵,这样就可以很容易地制作动画带有一些 SKAction 的精灵。

标签: swift sprite-kit fragment-shader


【解决方案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
// ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多