2012-09-03 2 views
1

이진 파일에 저장하는 데 문제가 있습니다.XNA 클래스 목록 저장

내 게임 정보를 이진 파일에 저장하고 게임이로드 될 때로드해야합니다. 나는 저장 될 모든 정보를 가지고 수업을 만들려고 노력했다.

그것은 다음과 같습니다

public struct SaveGameData 
{ 
    public List<Chunk> chunkList; 
    public string saveName; 
    public string playerName; 
    public Vector2 playerPosition; 
} 

문제는 ... 그것은 직렬화하지 않으며이 XNA 클래스에 대한 참조를 포함하고 있기 때문에 클래스가 직렬화 될 수없는 덩어리의 목록입니다.

는 데이터를 저장하는 내 기능은 다음과 같습니다 :

public static void saveGame(string mSaveFileName, SaveGameData data) 
    { 
     saveFileName = mSaveFileName; 

     if (!Directory.Exists(saveFilePath)) 
     { 
      Directory.CreateDirectory(saveFilePath); 
     } 

     FileStream stream = File.Open(saveFilePath + saveFileName + ".dat", FileMode.OpenOrCreate, FileAccess.Write); 

     data.saveName = saveFileName; 
     formatter.Serialize(stream, data); 
     stream.Close(); 
    } 

어떻게 파일에 클래스의 인스턴스를 저장합니까 다음 나중에 읽어?

+0

그럼 jsut 호출을 serialize하지 않고 모든 것이 완료됩니다. 클래스를 올바르게 결정하고 직렬화 할 수 있어야합니다. 자세한 내용은 [this] (http://msdn.microsoft.com/en-us/library/ms233843.aspx)를 참조하십시오. 하나의 마지막 조언은 매우 간단한 데이터를 직렬화합니다. 텍스처와 같은 복잡한 클래스를 직렬화하려는 경우에는 작동하지 않습니다. XNA 클래스가 벡터 및 매트릭스 인 경우 잘해야합니다. – dowhilefor

+4

'청크 (Chunk) '정의를 줄 수 있습니까? – Seb

답변

0

데이터를 저장하는 동안 문제가 없습니다.

XNA를 사용하면 사용자 또는 게임 세부 정보의 데이터를 파일에 쉽게 저장할 수 있습니다. 하지만 물건을 직렬화 할 때 문제가있을 수 있습니다. 여기 제가 사용한 다른 옵션이 있습니다. 당신은 그 중 하나를 선택할 수 있습니다.

클래스로 serialize 할 수있는 클래스 (serialize 특성이있는 클래스) 인 경우으로 저장하면 클래스를 XML로 serialize하고 자신을 디스크에 쓸 수 있습니다. 순수 C#을 사용하여 여러 가지 방법이 있습니다. 여기에 MSDN입니다. 둘 중 하나를 선택할 수 있습니다.

JSON으로 저장 : 클래스가 직렬화 가능한 경우 파일 스트림을 사용하여 디스크에 JSON으로 저장할 수 있습니다. JSON은 순수한 문자열이며 스트림으로 데이터를 쓸 수 있습니다. 텍스트로

저장 :은 개인적으로 어떤 구조가없는이 파일로이 선호하지 않고 다시 읽는

저장 바이너리로 어려운 결코 : 여기에 노력하고있다. 바이너리 객체로 추가로 데이터를 변환하십시오. 가장 큰 이유는 데이터를 읽을 수도 있습니다. 옵션보다 빠르지 만 게임에서 IO 작업을 실제로 수행해야하는 순간이 매우 적습니다. 그래서, 나는 개인적으로 상기 옵션을 선호합니다.

더 자세한 정보가 필요하면 알려주십시오.