2017-09-24 9 views
0

잠시 동안 SpriteNode (및 노드의 모든 자식)를 '디스크'로 저장하는 방법을 찾기 위해 인터넷을 트롤링했습니다. 따라서 GameScene을 종료 한 후 돌아 오면, 스프라이트는 정확히 내가 그들을 떠난 방법입니다.Swift에서 SKSpriteNode 저장/보관

나는, 전체 장면을 보관하는 하나 개의 노드 (그것이 가지고있는 많은 아이들) 내가 SpriteKit 및 신속한 작동

필요하지 않습니다.

누구든지 튜토리얼 또는 이것을 설명하는 방법에 대해 설명하는 문서를 가르쳐 주시겠습니까 ??

많은 도움을 주셔서 감사합니다.

안부 아담.

답변

1

SKSpriteNode은 매우 복잡한 개체입니다. 모든 것을 저장하는 것은 많은 어려움입니다. 속성이 많이 있다는 것을 잊지 말고 physicsBody과 같은 일부 속성에는 하위 속성이 있습니다.

그래서 노드 전체를 저장하는 것이 아니라 노드를 완전히 표현할 수있는 정보를 저장하는 것입니다. 예를 들어, 노드에서 변경할 수있는 것이 유일한 경우, 색상 만 저장하면됩니다. 노드를 다시 만들려면 노드를 정상적으로 다시 만든 다음 저장 한 색을 읽고 설정하십시오.

결국, 당신은 String, Int, Bool, Array, Dictionary

이후 같은 속성 목록에있는 값의 유형이 포함 된 객체가있는 "속성 목록"으로 끝낼 필요 당신은 정확한 시나리오를 언급하지 않았다, 나는 단지 예를 든다.

class SpriteInfo { 
    let positionX: Double 
    let positionY: Double 
    let subnodes: [SpriteInfo] 

    // init here... 
} 

위의 것은 속성 목록 유형이다. 그런 다음 UserDefaults에 저장할 수 있습니다.

+0

고마워요, 내 노드는 아마도 아이들로서 다른 노드가 수백 개 있고 크기, 모양, x/y 위치, 이전 노드에 상대적인 각도 등을 모두 저장할 필요가 있습니다. 코드화 가능 또는 일종의 인코딩을 사용하여 전체를 단순히 보관할 수있는 방법이 없습니까? 전체 트리를 다시 그리는 것이 가능할 수 있지만 고통스러운 방법 인 것 같습니다 ... – Adam

+0

코드 가능 코드를 사용하는 것은 괜찮지 만 여전히 모든 속성을 인코딩해야합니다. 스프라이트 노드의 전체 상태를 저장하는 것은 쉬운 일이 아닙니다. 어쩌면 당신이 잘못 문제에 접근하고있는 것일 수 있습니다. @아담 – Sweeper