我在项目中添加了两个着色器,一个是WWDC 2014示例中的相同着色器,另一个具有相同的代码,但添加了自定义统一样式。问题在于,具有自定义制服的精灵在应用程序运行时会变为静态,而在Xcode的SpriteKit编辑器中会变为黑色。
下面u_speed
是带有自定义制服的着色器,用于控制波浪移动的速度。
void main()
{
float currTime = u_time * u_speed;
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.) * v_color_mix.a;
}
我将这个项目与着色器和两个显示该问题的精灵放在一起。
据我所知,您的代码没有错。GameScene.sks如何将您的自定义着色器统一传递到着色器中,导致该着色器为0,并且动画冻结,似乎存在一个错误。
如果您在代码中而不是在UI Builder中初始化所有内容,则可以正常工作。将此粘贴到您的文件中,didMoveToView:
以了解我的意思。
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithColor:[SKColor whiteColor] size:CGSizeMake(100, 100)];
sprite.position = CGPointMake(self.size.width/2, self.size.height/2);
[self addChild:sprite];
SKShader* spin2x = [SKShader shaderWithFileNamed:@"Shader2"];
spin2x.uniforms = @[
[SKUniform uniformWithName:@"u_speed" float:(2.0)],
];
sprite.shader = spin2x;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句