着色器中的变量u_time告诉您当前时间。但是,如果您重复使用着色器(根据Apple 的最佳实践:“如果多个精灵需要相同的行为,请创建一个着色器对象并将其与每个精灵 [\xe2\x80\xa6] 关联”),然后u_time继续从第一次将其添加到场景中时。这使得使用着色器产生某些类型的效果变得困难,例如从黑色到白色的简单淡入淡出,如下所示:
void main() {\n float duration = 3.0; // seconds\n float progress = u_time / duration;\n\n gl_FragColor = vec4(progress, progress, progress, 1.0);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n该着色器第一次添加到精灵时会按预期工作,u_time从零开始。但是,后续重用相同的着色器代码会以非零开始u_time。因此,后续着色器将开始完全白色,并且不会渲染预期的从黑到白的淡入淡出。这似乎极大地限制了可能的效用SKShader。