我在.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.);
}
答案 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")