2014-02-19 1 views
5

저는 현재 XNA에서 Monogame까지 게임을 포팅하려고 합니다만, 콘텐츠 파이프 라인을 협력하는 데 어려움을 겪고 있습니다. 내 게임은 XNB 자산으로 여러 XML 파일을 사용하여 게임의 오브젝트를 나타냅니다. 지침은 here입니다.Monogame 콘텐츠 파이프 라인을 통해 XML 파일로드?

using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Content; 
using Microsoft.Xna.Framework.Graphics; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml.Linq; 

namespace FileTypes 
{ 
    public class PartFile 
    { 
     public struct State 
     { 
      public Rectangle[] frames; 
      public int[] collision; 
     } 

     public Vector2 size; 
     public string image; 
     public string defaultState = "default"; 
     public bool fillBG; 
     public int ticksPerFrame; 
     public Dictionary<string, State> states; 
     public string[] modules; 
    } 
} 

: 여기

An unhandled exception of type 'Microsoft.Xna.Framework.Content.ContentLoadException' occurred in MonoGame.Framework.dll

Additional information: Could not load Parts\Window.xnb asset as a non-content file!

내가 XML 파일의 내용을 정의하는 데 사용 된 클래스입니다 그러나, Monogame에이를 통해 단어에 대한 단어를 이동하려고하면 다음과 같은 오류가 발생합니다

: 나는 파일을로드하는 데 사용하는 코드의 샘플이 마침내 여기

<?xml version="1.0" encoding="utf-8" ?> 
<XnaContent> 
    <Asset Type="FileTypes.PartFile"> 
    <size>2 3</size> 
    <image>Computer</image> 
    <defaultState>default</defaultState> 
    <fillBG>false</fillBG> 
    <ticksPerFrame>7</ticksPerFrame> 
    <states> 
     <Item> 
     <Key>default</Key> 
     <Value> 
      <frames> 
      0 0 40 60 
      40 0 40 60 
      </frames> 
      <collision> 
      0 0 
      0 0 
      0 0 
      </collision> 
     </Value> 
     </Item> 
     <Item> 
     <Key>active</Key> 
     <Value> 
      <frames> 
      80 0 40 60 
      120 0 40 60 
      </frames> 
      <collision> 
      0 0 
      0 0 
      0 0 
      </collision> 
     </Value> 
     </Item> 
    </states> 
    <modules> 
     <Item>testModule</Item> 
    </modules> 
    </Asset> 
</XnaContent> 

하고 다음은 프로젝트에서 XML 파일 중 하나입니다

FileTypes.PartFile srcPart = content.Load<FileTypes.PartFile>("Parts\\" + name); 

아무도 내가 모노 게임에서 코드 작업을하기 위해해야 ​​할 일을 알고 있습니까? 나는 공정한 동안 인터넷을 둘러 보았다. 그러나 지금까지 나는 나의 이슈에 대한 해결책을 아직 찾지 못했다. 다른 방법으로는, 내가 이번에는 전체 시스템을 잘못 생각하고 있고, 내가하고 싶은 것을 처리하는 훨씬 쉬운 방법이 있다면, 나는 그것을 듣고 싶다.

미리 감사드립니다. 내가 틀리지 않는

답변

0

, 당신은 출력 디렉토리에 파일을 "내용"과 복사본의 빌드 작업을 설정해야합니다에 "복사는 새로운 경우"파일의 속성 탭은

+0

나는 이것을했고 아직도 두려워하지 않는다. –

+0

oops, 방금 게시 한 링크 (콘텐츠 파이프 라인 데이터에 대해 XML을 사용한 적이 한번도 없었습니다.)를 살펴 보았습니다. 콘텐츠 파이프 라인이 없으므로 모노 게임에서이를 수행 할 수 있을지 의심 스럽습니다. 따라서 XML을 변환 할 수 없습니다. xnb 파일, xna 파일을 빌드하고 monogame 프로젝트에 xnb 파일을 복사하고 위의 ^를 수행하는 것이 좋습니다. – Nico

0

Content.Load<T>Microsoft.Xna.Framework.Content.Pipeline.IntermediateSerializer를 사용 XML의 경우. Monogame은 Microsoft.Xna.Framework.Content.Pipeline을 지원하지 않습니다. 즉, 중간 xml을 비 직렬화 할 수 없다는 뜻입니다.

3

MonoGame 파이프 라인을 사용하여 사용자 지정 콘텐츠를로드하는 것에 대해 다소 긴 시간이 걸렸습니다 (tutorial). 여기

  1. 는 콘텐츠 형식 작가
  2. 컨텐츠를 만들기 만들기 콘텐츠 프로세서를 만들기 콘텐츠 수입
  3. 만들기 콘텐츠 수입, 프로세서와 작가
  4. 을 보유 할 새 프로젝트를 만들고 요약입니다 형식 판독기
  5. 파이프 라인 도구에서 DLL을 참조하십시오.
  6. 게임 내용을 읽으십시오.

수입업자, 프로세서, 리더 및 작성기 작성은 XNA와 동일합니다. 이에 대해서는 MSDN documentation을 참조하십시오.

까다로운 부분은 DLL이 파이프 라인 도구와 함께 작동하도록하는 것입니다. 이를 참조로 추가하려면 참고 자료 루트 트리 노드의 속성을 참조하십시오.

0

Monogame에는 XML 용 컨텐츠 프로세서가 함께 제공됩니다. 콘텐츠 파이프 라인 앱을 열고 XML 파일을 추가하십시오. 가져 오기 도구 XmlImporter 및 프로세서 PassThroughProcessor이 표시됩니다.

@craftworkgames excellent tutorials에서 동작을 확장하는 방법을 살펴보십시오.