如何将SKSpriteNode与自定义SKShader一起添加到场景中?

时间:2014-07-29 21:54:29

标签: ios opengl-es sprite-kit shader

我在.sks文件中完美呈现了我的着色器。问题是将其添加到SKSpriteNode或任何其他受支持的节点以在实际游戏场景中显示它。这是我在场景初始化程序中的代码:

    let shaderSprite = SKSpriteNode(texture: nil, color: nil, size: CGSizeMake(100, 100))
    shaderSprite.shader = SKShader(fileNamed: "Player.fsh")
    shaderSprite.position = CGPointMake(200, 200)
    shaderSprite.zPosition = 1000
    addChild(shaderSprite)

精灵根本没有显示,但我没有任何更高zPosition的节点。 在精灵套件游戏中使用自定义着色器的最佳做法是什么?

编辑:

我尝试了三种不同的着色器。例如,来自WWDC 2014的“sk中的新内容”会议:

void main(void)
{
    float currTime = u_time;

    vec2 uv = v_tex_coord;
    vec2 circleCenter = vec2(0.5, 0.5);
    vec3 circleColor = vec3(0.8, 0.5, 0.7);
    vec3 posColor = vec3(uv, 0.5+0.5 * sin(currTime)) * circleColor;

    float illu = pow(1. - distance(uv, circleCenter), 4.) * 1.2;
    illu *= (2. + abs(0.4 + cos(currTime * -20. + 50. * distance(uv, circleCenter))/1.5));
    gl_FragColor = vec4(posColor * illu * 2., illu * 2.);
}

1 个答案:

答案 0 :(得分:0)

哎呀,太容易打扰stackoverflow的圣人了。 只需将虚拟纹理传递给SKSpriteNode初始化程序即可解决问题。

let shaderSprite = SKSpriteNode(imageNamed: "playButton")
shaderSprite.shader = SKShader(fileNamed: "TestShader")

let dummyTexture = SKTexture(imageNamed: "anyImageName")
shaderSprite = SKSpriteNode(texture: dummyTexture, color: nil, size: CGSizeMake(100, 100))
shaderSprite.shader = SKShader(fileNamed: "TestShader")
相关问题