我想按照图片所示创建这个
我有一个正常的身体球,有动力,受重力影响,可以旋转。
问题是,每当你把一个孩子附加到一个可以旋转的球上时,雪碧就会跟随和球一样的运动。
什么是使阴影停留在球底部的最佳方法?我可以直接做:
ball.addChild(shadow)
有一些属性会让它在底部保持静态?或者我应该
self.addChild(shadow)
然后在更新期间()
shadow.position(ball's position)
提前谢谢。
最佳答案
我建议使用SKShader
来应用简单的阴影效果。
您需要创建一个扩展名为.fsh
的空文件,让我们使用shader.fsh
。着色器代码将生成一个z
属性,该属性是基于每个像素到图像中心的距离的“伪”深度。使用z
,它计算法线,阴影强度是法线和灯光位置的点积(这里我将灯光放置在场景左上角):
void main()
{
vec2 coord = (v_tex_coord - 0.5) * 2.0;
if (length(coord) > 1.0) {
discard;
}
vec3 diffuseColor = SKDefaultShading().rgb;
vec3 lightPosition = normalize(vec3(-1.0, 1.0, 1.0));
float z = sqrt(1.0 - coord.x * coord.x - coord.y * coord.y);
vec3 normal = normalize(vec3(coord.x, coord.y, z));
float shadow = max(0.0, dot(normal, lightPosition));
diffuseColor *= shadow;
gl_FragColor = vec4(diffuseColor, 1.0);
}
现在可以对形状节点进行如下着色:
let ball = SKShapeNode(circleOfRadius: 50)
ball.fillColor = .yellow()
ball.strokeColor = .clear()
ball.fillShader = SKShader(fileNamed: "shader.fsh")
…并且,对于sprite节点,只需设置
shader
属性: ball.shader = SKShader(fileNamed: "shader.fsh")
然后使用此图像:
阴影版本看起来像:
干杯!
西蒙
关于ios - 将静态阴影附加到动态物理的底部Swift SpriteKit中的 body 球,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38112437/