2017-02-08 5 views
2

내 스프라이트의 위에 누워 있지, 그래서 약간의 적응과 가이드에서 오는 다음 쉐이더 (http://battleofbrothers.com/sirryan/understanding-shaders-in-spritekit) 제작 :쉐이더 내가 SpriteKit에서 쉐이더를 적용하는 방법을 이해하려고 노력 중이 야

void main() { 
    vec4 val = texture2D(u_texture, v_tex_coord); 

    if (val.a == 1.0) { 
     gl_FragColor = vec4(1.0,1.0,1.0,1.0); 
    } else { 
     gl_FragColor = val; 
    } 
} 

을 이 간단한 쉐이더의 아이디어는 스프라이트 노드의 모든 불투명 픽셀을 흰색으로 변환하는 것입니다.

쉐이더는 단일 텍스처를 이미지로 가지는 스프라이트 노드에서 작동합니다.

내가 가지고있는 문제는 다층 SKScene에서 오는 스프라이트 노드에 쉐이더를 적용 할 때 무시되는 것 같습니다. 장면의 모든 자식 노드에 셰이더를 설정하려고했지만 여전히 나타나지 않습니다.

제안 사항?

+0

죄송합니다, 좀 이해를 누락 :

지금 나는 다음과 같은 작업 내 아이 노드의 계층 구조를 다음 코드를 사용합니다. 다층 SKScene이란 무엇을 의미합니까? – Confused

+0

안녕하세요. 지원해 주셔서 감사합니다. 내 문제에 대한 해결책을 찾았습니다 (곧 게시 할 예정입니다). 어쨌든 "다중 레이어 SKScene"은 시각 장면 편집기 파일 (.sks)을 만들었으며 여러 장면에 다양한 노드를 추가하여이 장면 안에 스프라이트를 만들었 기 때문에 쉽게 애니메이션을 만들 수 있습니다. 일부 SKActions와 스프라이트. – gionti

답변

1

문제점에 대한 해결책을 찾았습니다.

나는 처음에 다음과 같은 내 스프라이트의 모든 어린이 노드에 쉐이더를 적용하려고 :

for child in children { 
    (child as! SKSpriteNode).shader = myShader 
} 

코드는 작동하지 않았다.

(self.childNode(withName: "body") as! SKSpriteNode).shader = myShader 
(self.childNode(withName: "body")!.childNode(withName: "arm") as! SKSpriteNode).shader = myShader 
// ... 
관련 문제