2017-01-09 7 views
1

here에 대한 가능한 해결책으로 노드 트리를 SKTexture에 렌더링하려고했습니다. 나는 이것에 대한 해답을 찾으려고 노력했다. 애플의 개발자 페이지 (here)를 보았다. 그것은 SKTexture로 노드 트리를 변환 명령이이 말한다 : SKTexture에 노드 트리의 변환을 실행에는 코드가 없기 때문에스위프트 3 (SpriteKit) : 노드 트리에서 텍스처 만들기

func texture(from node: SKNode) -> SKTexture? 

있지만, 코드가 완전하지 않습니다. 내가 틀린 일을하거나 코드를 사용하여 노드 트리를 SKTexture으로 렌더링해야합니다.

어떤 조언, 도움, 그리고 답변을 주셔서 감사합니다!

답변

2

texture(from:)SKView의 인스턴스 메서드로 0 이상의 자식을 매개 변수로 사용하고 옵션 SKTexture을 반환합니다. 반환 값은 선택 사항이므로 사용하기 전에 unwrap해야합니다.

didMove(to:)에서, 당신은 당신은 또한 부분을 렌더링 할 수있는 옵션

if let texture = self.view?.texture(from: node) { 
    let sprite = SKSpriteNode(texture:texture) 
    addChild(sprite) 
} 

체인 사용, 텍스처에게 SKScene 서브 클래스에서 다른 방법에서

if let texture = view.texture(from: node) { 
    let sprite = SKSpriteNode(texture:texture) 
    addChild(sprite) 
} 

를 만들 view 매개 변수를 사용할 수 있습니다 사각형 내부의 노드 트리의 내용

let rect = CGRect(x:-width/2, y:-height/2, width:width, height:height) 
if let texture = self.view?.texture(from: node, crop: rect) { 
    let sprite = SKSpriteNode(texture:texture) 
    addChild(sprite) 
} 
+0

감사합니다! 어쨌든 런타임 동안 텍스처의 내용을 변경하는 대신 항상 각 프레임에 새로운 텍스처를 생성 할 수 있습니까? 지금은 프레임마다 새로운 텍스처를 생성하기 때문에 프레임 속도가 너무 낮습니다. –

+0

노드 트리가 장면에있을 필요가 없기 때문에 초기화 중에 텍스처를 사전 계산하거나 런타임 중에 노드 트리를 백그라운드 스레드의 텍스처로 렌더링 할 수 있습니다. 노드 트리가 매우 동적 인 경우, 아마도'texture (from :)'이외의 것을 사용해야 할 것입니다. 그것은 당신이 성취하고자하는 것에 달려 있습니다. – 0x141E

+0

프로그램 전체에서 텍스처가 변경되므로이 텍스처로 항상 물리 구조를 만들고 싶습니다. 런타임 중에 노드 트리를 백그라운드 스레드의 텍스처로 렌더링하려면 어떻게해야합니까? –