XNA를 사용한 게임 내 디자인?


10

게임 내 디자인에 대해 궁금합니다. 현재 상황은 Tiled와 관련이 있습니다 .Tiled에 다른 유형의 객체가있는 많은 다른 레이어가 있습니다 (Tiled에 익숙하지 않은 사람은 객체가 임의의 속성이 할당 된 좌표에 불과합니다).

현재 맵 파일을 약간 변경하여 모든 것이 올바르게 배치되었는지 확인할 때마다 게임을 다시 컴파일하고 있습니다. 맵 파일 변경이 감지되면 게임에서 레벨을 자동으로 다시로드 할 수있는 방법이 있습니까? XNA는 이것을 허용합니까, 아니면 컨텐츠 파이프 라인이 동적 컨텐츠를 허용하지 않는 방식으로 그러한 방식을 허용합니까? 모든 팁이나 제안은 절대적으로 환영합니다.

답변:


8

맵 파일이 Content Pipeline을 통해 처리 된 다음 런타임에 Content.Load를 사용하여로드한다고 가정합니다. 두 가지 옵션이 있습니다.

  • IntermediateSerializer.Serialize를 통해 맵을 XML 파일로 저장하십시오. 그런 다음 런타임에 IntermediateSerializer.Deserialize를 사용하여 해당 내용을 읽고 변경 사항을 볼 수 있습니다.
  • 더 어려운 방법은 런타임에 MSBuild를 호출하여 파일을 적절한 XNB로 다시 컴파일하고 ContentManager를 사용하여 다시로드하는 것입니다. 이 샘플 은 그렇게합니다.

둘 사이에서 무언가를 정리할 수있을 것입니다. 감사합니다!
Christopher Horenstein

2

당신 이 이것을 일어나 정말로 빨리 가고 싶다면 Karvonite 를 사용할 수도 있습니다 .

민첩한 지속성 프레임 워크입니다. 새 버전이 Windows Phone 7 또는 xbox에서 작동하는지 확실하지 않습니다.

지속성 편집기를 사용하여 지속성 정의를 작성합니다 (조립품을 가져오고 유지하려는 클래스 / 구조의 필드 / 속성을 확인하기 만하면됩니다). 코드에서 ObjectSpace를 시작하고 오브젝트에서 추가 / 제거 / 가져 오기 . (이러한 객체는 유지됩니다)

타일 ​​엔진 또는 호출하는 것이 무엇이든 맵을 얻는 방법을 정확하게 신경 쓰지 않고 요청한 것을 얻는 것만으로 추상화를 만들 수 있다면. 그런 다음 돌아가서 XmlSerializer 또는 중급을 사용할 수 있습니다. 다른 직렬 변환기를 구현하기 위해해야 ​​할 일은 추상화 (인터페이스 또는 추상 클래스)의 또 다른 구현을 만드는 것입니다.

XNA 제작자 클럽 웹 사이트에서 런타임에 콘텐츠를 작성하는 방법에 대한 예가 있다고 생각합니다. 최신 프레임 워크로 빌드되지 않았을 수 있습니다. 이렇게하면 이미 콘텐츠 파이프 라인을 사용하는 경우 이전 코드를 유지할 수 있습니다. 다음은 링크입니다. Winform Series 2 : 콘텐츠로드


약간 바보 같은 느낌이 들지만이 프레임 워크를 사용하여 워크 플로를 계획 한 내용을 설명 할 수 있습니까? 정말 깔끔하게 들리지만 어떻게 접근 해야할지 모르겠습니다.
Christopher Horenstein

1
지속성 편집기에서 직렬화를 정의합니다. (실제로 쉽게 객체 어셈블리를 가져 와서 구조 / 클래스 및 유지하려는 필드 / 속성의 일부 상자를 확인하면됩니다) 일단 완료하면 객체를 직렬화 / 직렬화 해제하는 객체 공간을 초기화 할 수 있습니다 . 일어나서 실행하는 것이 매우 깔끔하고 빠릅니다.
Michael Coleman

1
Visual Studio 외부에서 콘텐츠를 작성하는 방법에 대한 더 좋은 예를 보려면 코드 플렉스에서이 프로젝트를 살펴볼 수도 있습니다. ( xnadevru.codeplex.com/… )
Michael Coleman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.